限制变量访问

Ema*_*sev 3 php variables function

我需要一个只有一个函数可以编写的变量(让我们调用该函数a),并且只有一个函数可以读取(让我们调用该函数b).那可能吗?

Gum*_*mbo 6

您可以使用静态变量:

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)