1

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

这是我用来测试的代码:

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

1 回答 1

2

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

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

如果您希望它是私有的,请将其定义为类定义中的私有变量。

于 2013-01-09T12:36:33.093 回答