php:类中的变量范围

时间:2015-03-10 10:11:24

标签: php class scope

我开始上课并且有一个可变范围问题。我在一个函数中定义一个变量$ query,需要在第二个函数中使用它。但是,第二个功能是没有看到它。

我想我可以将$ query传递给类外部,然后传递它($ instance-> QueryExecute($ query);)。但这看起来很混乱,在课堂外不需要$ query。

解决这个问题的正确方法是什么?

谢谢你, 路易斯。

<?php
class MyProduct {
    public function QueryBuild() {
        $query = "SELECT * FROM my_product";
    }
    public function QueryExecute() {
        $result = mysql_query($query);
        while ($record = mysql_fetch_assoc($result)) {
            foreach ($record AS $key => $value) {
                $this->product[$record["pro_id"]][$key] = $value;
            }
        }
    }
}
?>

2 个答案:

答案 0 :(得分:0)

您在类中定义了一个属性,表示我想添加mysql_*函数已弃用。

<?php
class MyProduct {
    private $query;
    public function QueryBuild() {
        $this->query= "SELECT * FROM my_product";
    }
    public function QueryExecute() {
        $result = mysql_query($this->query);
        while ($record = mysql_fetch_assoc($result)) {
            foreach ($record AS $key => $value) {
                $this->product[$record["pro_id"]][$key] = $value;
            }
        }
    }
}
?>

答案 1 :(得分:0)

有两种方法可以解决您的问题,第一种(在我看来)比另一种更好:

选项1:返回值

只需告诉构建方法返回值,然后在其他方法上使用它:

<?php
class MyProduct {
    public function QueryBuild() {
        $query = "SELECT * FROM my_product";
        return $query;
    }
    public function QueryExecute() {
        $result = mysql_query($this->QueryBuild());
        while ($record = mysql_fetch_assoc($result)) {
            foreach ($record AS $key => $value) {
                $this->product[$record["pro_id"]][$key] = $value;
            }
        }
    }
 }

选项2:对象字段

您在类中定义了一个包含查询的字段。但是,这意味着在调用QueryBuild()之前必须始终调用方法QueryExecute(),这不是特别合理。

<?php
class MyProduct {
    private $query;
    public function QueryBuild() {
        $this->query = "SELECT * FROM my_product";
    }
    public function QueryExecute() {
        $result = mysql_query($this->query);
        while ($record = mysql_fetch_assoc($result)) {
            foreach ($record AS $key => $value) {
                $this->product[$record["pro_id"]][$key] = $value;
            }
        }
    }
}

有些注意事项:

  • 请勿使用mysql_*个功能。它们已被弃用,已被MySQLi和PDO取代。
  • 看看编码惯例。方法名称应以小写字母开头,这使得每个习惯这些标准的人都可以轻松阅读代码。