PHP / Laravel魔术,这是如何工作的?

时间:2014-09-25 19:42:09

标签: php laravel

我正在查看Laravel文档,我看到了这个片段:

class UserController extends BaseController {

    /**
     * The layout that should be used for responses.
     */
    protected $layout = 'layouts.master';

    /**
     * Show the user profile.
     */
    public function showProfile()
    {
        $this->layout->content = View::make('user.profile');
    }

}

我们可以清楚地看到$ this-> layout ='layouts.master'。然而,然后他们定义了布局对象的子代(据我所知,它只是一个基本的PHP字符串,并且没有一个名为content的字段,通过......

$this->layout->content = View::make('user.profile');

  1. 字符串如何定义名为content的字段?

  2. 当我继承BaseController并尝试为其赋值时 $ this-> layout->内容,为什么会出现以下错误:“尝试 分配非对象的属性“?

1 个答案:

答案 0 :(得分:6)

为什么不看看BaseController?看起来他们改变了$this->layout

https://github.com/laravel/laravel/blob/master/app/controllers/BaseController.php

<?php

class BaseController extends Controller {

    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }

}

我的建议是,如果你使用PHP框架,当你不明白它的工作原理时,不要害怕检查它的来源。通常会有更少的魔法&#34;比你想象的还要......

IMO,这似乎是一个糟糕的设计,将变量初始化为字符串,然后将其更改为某个对象。只是滥用宽松的打字。