-2

我有这样的课:

class sqlClass    {
  var $myvar = "test value 1"
  public function test01() {
    global $myvar;
    //some operations here
    $myvar = "test value 2"
    return true;
  }
}

在其他文件中,我有这个 PHP 脚本:

include_once('functions.php'); // where my class is
$data = new sqlClass();
if ($data->test01()) {
  echo $data->myvar;
} else { echo "No value"; }

那么在这个例子test01()中总是正确的,所以我保证会$myvar发生变化,但是,当我$myvar在类中执行应该改变它的值的函数之后打印时,它会打印旧值“测试值 1”而不是“测试值 2”。那么,我错过了什么?

4

2 回答 2

4

好的,首先你不应该使用var关键字。那就是你不应该使用的 php4,除非你正在维护一个遗留应用程序。相反,您使用可见性关键字之一 - publicprotectedprivate

其次,您不应该global在没有需要的类中使用。要访问您使用的类成员,$this->memberName如果您需要访问类外部的变量,您应该将它们作为参数传递给您的方法或构造函数。

所以考虑到这就是你的代码应该是什么样子:

class sqlClass    {
  public $myvar = "test value 1";

  public function test01() {

    //some operations here
    $this->myvar = "test value 2"

    return true;
  }
}

话虽如此,我会阅读php5 手册中关于 OOP 的整个部分

于 2012-10-22T13:38:39.657 回答
0

要更改对象的实例变量,请使用$this->

class sqlClass {

    public $myvar = "test value 1"

    public function test01() {
      $this->myvar = "test value 2"
      return true;
    }

}

这将改变变量$data->myvar。你正在做什么意味着它正在改变你输出global的全局变量. 它与对象无关。myvarecho $myvar$data

于 2012-10-22T13:38:12.667 回答