您可以使用静态变量:
function foo($val=null) {
static $var = null;
if (!is_null($var)) $var = $val;
return $val;
}
Run Code Online (Sandbox Code Playgroud)
这里$var只在函数内部可见,foo并在多个调用中保持:
foo(123);
echo foo(); // 123
foo(456);
echo foo(); // 456
Run Code Online (Sandbox Code Playgroud)
或者使用具有私有成员的类,并使用公共方法访问/修改它:
class A {
private $var;
public function setVar($val) {
$this->var = $val;
}
public function getVar() {
return $this->var;
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,私有成员var只对该类的特定实例可见:
$obj1 = new A();
$obj1->setVar(123);
$obj2 = new A();
$obj2->setVar(456);
echo $obj1->getVar(); // 123
echo $obj2->getVar(); // 456
Run Code Online (Sandbox Code Playgroud)
如果您将该成员设置为static,那么该类只有一个而不是每个实例:
class A {
private static $var;
public function setVar($val) {
self::$var = $val;
}
public function getVar() {
return self::$var;
}
}
$obj1 = new A();
$obj1->setVar(123);
$obj2 = new A();
$obj2->setVar(456);
echo $obj1->getVar(); // 456
echo $obj2->getVar(); // 456
Run Code Online (Sandbox Code Playgroud)