动态变量不是私有的吗?

时间:2013-01-09 11:09:10

标签: php oop class dynamic

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

以下是我用来测试此代码的代码:

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.
}

1 个答案:

答案 0 :(得分:2)

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

但是由于你没有明确地定义变量,所以PHP不知道你希望它是如何定义它的,它也无法告诉它,所以它只是采用最安全的选项并使公开。

如果您希望私有作用域,请在类定义中将其定义为私有变量。