为什么未初始化的财产在课堂上公开?

时间:2014-03-28 11:21:37

标签: php oop

请考虑以下代码:

class foo {
    function bar() {
        $this->baz = 'hello there!';
    }
}

$f = new foo;
$f->bar();
echo $f->baz; // hello there!

为什么上面的代码有效?我的意思是我没有初始化$baz变量,也没有使用__get__set魔术方法。我原以为它会给我错误,但似乎$baz已创建并已分配public可见性。 (顺便说一下,它确实在静态上下文中给出错误)

3 个答案:

答案 0 :(得分:5)

谁告诉您未初始化,您已通过声明$this->baz = 'hello there!';初始化 这就是面向对象概念的工作原理。你声明一个类,为该类创建一个实例,然后访问该函数,最后在该成员函数中回显一个变量,这就是面向对象的工作原理......

答案 1 :(得分:2)

这是因为PHP的运作方式。如果设置未初始化的属性,即使没有__set,也会创建它。另一方面,如果您尝试阅读未初始化的属性,则会以警告结束。

答案 2 :(得分:1)

默认设置为public。

请参阅此链接: http://www.php.net/manual/en/language.oop5.visibility.php