可以在运行时扩展类,我已经玩了一下,但后来我偶然发现了这个,这对我来说很奇怪。如果我在私有函数中定义一个新变量,它就变成了一个公共变量。它不应该至少受到保护吗?
以下是我用来测试此代码的代码:
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.
}
答案 0 :(得分:2)
PHP允许变量在任何时候实例化,而无需明确定义它们。
但是由于你没有明确地定义变量,所以PHP不知道你希望它是如何定义它的,它也无法告诉它,所以它只是采用最安全的选项并使公开。
如果您希望私有作用域,请在类定义中将其定义为私有变量。