如何$这部作品在一个.phtml文件Zend框架?(How $this works in .phtm

2019-10-17 11:29发布

对于我和OOP所有的做法我从来没有使用$此之外的类定义的。

虽然zendframework我们在视图模板文件中使用$此,显然它不是一个类定义的范围。 我不知道它是如何被执行? 我用Google搜索了很多,但有没有运气。

我想知道zendframework如何呈现与$这一点,认为文件的机制。

Answer 1:

它实际上一个类定义的范围。 简单的测试案例:

<?php
// let's call this view.php
class View {
   private $variable = 'value';
   public function render( ) {
       ob_start( );
       include 'my-view.php';
       $content = ob_get_clean( );
       return $content;
   }
}
$view = new View;
echo $view->render( );

现在,创建另一个文件:

<?php
// let's call this my-view.php.
<h1>Private variable: <?php echo $this->variable; ?></h1>

现在去拜访view.php,你会看到我的-view.php曾获得View类的私有变量。 通过使用include ,你实际上是PHP文件加载到目前的范围。



Answer 2:

鉴于脚本文件( .phtml的) $this是指目前使用的实例Zend_View类-即下令渲染这个特殊的脚本之一。 引用的文档 :

这是[a view script] PHP脚本像任何其他,但有一个例外:它执行的Zend_View实例的范围内,这意味着内部,要在Zend_View的实例属性和方法$这点的引用。 (由控制器分配给该实例变量是在Zend_View的实例的公共属性)。

这是它是如何做:当你的控制器来电(或明或暗地) render方法(定义在Zend_View_Abstract类),以下的方法(在规定Zend_View类)到底是执行:

/**
 * Includes the view script in a scope with only public $this variables.
 *
 * @param string The view script to execute.
 */
protected function _run()
{
   if ($this->_useViewStream && $this->useStreamWrapper()) {
      include 'zend.view://' . func_get_arg(0);
   } else {
      include func_get_arg(0);
   }
}

...其中func_get_arg(0)指的是完整的文件名包含脚本的(路径+名称)。



文章来源: How $this works in .phtml files in zend framework?