CakePHP:为什么他们在第一个括号 () 中使用 className?

CakePHP : Why they use className with first brackates ()?

我使用了cakephp 方法来更改布局。它看起来像

$this->viewBuilder()->setLayout('admin');

我见过 viewBuilder Class,他们没有使用任何结构。那么对于调用方法 setLayout 为什么我需要像 viewBuilder() 这样使用 className。一开始以为是嵌套方法,其实不是

查看 cake.org, you can see that method(not class) viewBuilder() is defined in trait ViewVarsTrait 处的 API 和 returns 一个 ViewBuilder 对象(即获取正在使用的视图生成器)。

ViewBuilder 对象可以访问方法 setLayout()

这就是您使用的原因:$this->viewBuilder()->setLayout('admin');

来自 source at cakephp.org

 26: trait ViewVarsTrait
 27: {
     ...
/**
 52:      * Get the view builder being used.
 53:      *
 54:      * @return \Cake\View\ViewBuilder
 55:      */
 56:     public function viewBuilder()
 57:     {
 58:         if (!isset($this->_viewBuilder)) {
 59:             $this->_viewBuilder = new ViewBuilder();
 60:         }
 61: 
 62:         return $this->_viewBuilder;
 63:     }
     ...

注意:有关 traits 是什么以及如何使用它们的更多信息。