是否有理由让动态变量不是私有的?


Is there a reason for dynamic variables to not be private?

可以在运行时扩展类,我一直在尝试它,但是后来我偶然发现了这个,这对我来说很奇怪。如果我在私有函数中定义了一个新变量,它就变成了一个公共变量。难道它不应该至少受到保护吗?

下面是我用来测试的代码:

class FooBar {
public function FooBar() {
    $this->t();
}
public function createVariable() {
    $this->NewVar();
}
private function NewVar() {
    $this->iam = "Hello you!";
}
private function t() {
    $this->T = "ballad";
    return $this->T;
}
}
$fb = new FooBar();
echo $fb->T;
echo "<br/>";
var_dump($fb);
$fb->createVariable();
echo $fb->iam;
echo "<br/>";
var_dump($fb);
echo "<br/>";
$fb->outer = "okay";
echo $fb->outer;

作为一个额外的,既然可以在运行时扩展一个类,为什么这是不可能的:

function foo() {
    private $this->anewvar = 0; //private is illegal.
}

PHP允许在任何时候实例化变量,而无需显式定义它们。

但是由于你没有显式地定义这个变量,PHP不知道你希望它的作用域是什么,你也没有办法告诉它,所以它只是选择了最安全的选择,把它变成了公共的。

如果你希望它的作用域是私有的,在类定义中将它定义为私有变量。