2014-02-18 38 views
0

我對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變量,但他們怎麼能做到這一點,而不會觸發「使用$此變量類上下文之外」錯誤?據我所知,這些標籤不是內部包含到任何類中的,任何PHP文件都不包含在模板文件中。

您能否提供一個簡單的解釋/例子說明這是如何工作的?

回答

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

他們使用include()和/或require。任何通過這些函數加載的東西就好像它被切割成&粘貼到調用代碼中一樣。例如

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` 

由於包括的文本在點直接插入碼包括()被調用,就好像被包含文件的內容物從字面上切割/在該點粘貼,對於$this內部沒有差異包含的文件 - 它在該方法調用中運行,$這將按預期工作。

但是,如果你有一個簡單的文件是這樣的:

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

你將得到Using $this when not in object context錯誤,因爲周圍的包含的代碼沒有對象/方法。