我有这样的类:
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"。那么,我错过了什么?
好的,首先你不应该使用var
关键字。这是 php4,除非您维护旧版应用程序,否则您不应该使用它。相反,您可以使用可见性关键字之一 -public
、protected
或private
。
其次,你不应该在类中使用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 的整个部分
要更改对象的实例变量,请使用$this->
:
class sqlClass {
public $myvar = "test value 1"
public function test01() {
$this->myvar = "test value 2"
return true;
}
}
这将更改变量$data->myvar
。你用global
做什么意味着它正在改变全局变量myvar
,你用echo $myvar
输出。它与对象无关$data
.