未定义属性如何使用此关键字工作


how undefined properties are working using this keyword?

下面的类工作很好,试图学习MVC,我只是想知道为什么。这句话可能很简单,但我却看不懂。

  1. 所以在控制器类中,我已经启动了视图对象(在其他地方定义)并分配给$this->视图。现在为什么这没有给我任何错误,因为我没有在控制器类的任何地方定义视图属性,也没有扩展。

  2. 错误类也是如此。为什么$this->view->msg工作得很好,因为msg属性在父节点和错误控制器本身都没有定义。

它们是如何工作的

        <?php
    class Controller {
        function __construct() {
            echo 'main controller <br/>';
            $this->view = new View();
        }
    }
?>

错误类扩展控制器

    <?php
class Error extends Controller {
    function __construct() {
        parent::__construct();
        echo 'This is error mate';
        $this->view->msg = 'This page does not exit by msg';
        $this->view->render('error/index');
    }
}
?>

您可以随时动态地为对象添加属性,它们不需要事先声明;就像常规变量一样。就是这样。

缺点是这些属性将是public,这可能不是您想要的,而且这是一个不好的实践,因为它使类的结构不那么明显。