请考虑以下代码:
class foo {
function bar() {
$this->baz = 'hello there!';
}
}
$f = new foo;
$f->bar();
echo $f->baz; // hello there!
为什么上面的代码有效?我的意思是我没有初始化$baz
变量,也没有使用__get
和__set
魔术方法。我原以为它会给我错误,但似乎$baz
已创建并已分配public
可见性。 (顺便说一下,它确实在静态上下文中给出错误)
答案 0 :(得分:5)
谁告诉您未初始化,您已通过声明$this->baz = 'hello there!';
初始化
这就是面向对象概念的工作原理。你声明一个类,为该类创建一个实例,然后访问该函数,最后在该成员函数中回显一个变量,这就是面向对象的工作原理......
答案 1 :(得分:2)
这是因为PHP的运作方式。如果设置未初始化的属性,即使没有__set
,也会创建它。另一方面,如果您尝试阅读未初始化的属性,则会以警告结束。
答案 2 :(得分:1)
默认设置为public。
请参阅此链接: http://www.php.net/manual/en/language.oop5.visibility.php