Zend框架如何设法在类之外使用$ this?

时间:2014-02-18 19:15:59

标签: php zend-framework this

我对PHP中的OOP相当新,我尝试创建自己的布局类。

就我而言,它的工作原理如下:

$layout = new Layout('some name'); // title
$layout->setStyle('somestyle.css');
$layout->addDiv('id/class', $content );

然后,为了了解专业人士如何创建模板应用程序,我开始阅读Zend网站,手册部分creation of layouts is covered,但我无法理解他们是否可能有一个单独的PHP文件初始化布局,但布局本身位于常规的html文件中。

在该文件中,他们在HTML标记中使用$this变量,但他们如何在不触发'在类上下文'之外使用$ this变量的情况下执行此操作?据我所知,标签内部没有包含在任何类中,也没有任何PHP文件包含在模板文件中。

请您提供一个简单的解释/示例,了解其工作原理?

2 个答案:

答案 0 :(得分:2)

的template.php

<p><?php echo $this->foo(); ?></p>

class.php

class Bar {

    public function render() {
        include 'template.php';
    }

    public function foo() {
        return 'foo';
    }

}

$bar = new Bar;
$bar->render();

这是怎么回事。模板文件包含在类方法中。

答案 1 :(得分:1)

他们正在使用include()和/或require。通过这些函数加载的任何内容就好像它被字面上剪切并粘贴到调用代码中一样。 e.g。

includeme.php:

<?php
    $var = 'foo';

其他一些文件:

<?php

function bar() {
   include('includeme.php');
   echo $var;   // ouputs "foo"
}
echo $var; // outputs "PHP Notice: Undefined variable: var

在目标代码中:

includemephp:

<?php
    $this->var = 'foo';
    echo $this->whatever;

以及其他一些文件:

class foo {
   public $var;
   public $whatever = 'yoohoo!';

   function bar() {
      include('includeme.php');
      echo $this->var;
   }
}
$x = new foo();
$x->bar(); // outputs `yoohoo!foo`

由于包含的文本被直接插入到代码中,所以调用了include(),就好像所包含的文件的内容在字面上被剪切/粘贴一样,内部$this没有区别包含的文件 - 它在该方法调用中运行,$ this将按预期工作。

但如果您有一个这样的简单文件:

<?php
    include('includeme.php');

您将收到Using $this when not in object context错误,因为所包含的代码周围没有对象/方法。