2013-02-05 28 views
1

我有一個Web應用程序,我在構建FuelPHP框架。我的本地開發環境運行PHP 5.4,而我的服務器運行PHP 5.3。在我的開發環境,從我的主模板文件,我能夠

<?php var_dump($this->active_request); ?> 

這導致關於請求(燃料\核心\ Request對象)一串數據被倒入一個模態對話框我參考。但是,當我嘗試在生產服務器(PHP 5.3)上運行完全相同的腳本時,它給了我舊的「ErrorException [錯誤]:在不在對象上下文中時使用$ this」

我知道使用實例化對象和靜態訪問方法之間的區別。我的問題是,爲什麼不同版本的PHP將相同的模板文件視爲具有不同的上下文?還是有一些其他的配置細微差異會導致兩種環境的明顯不同的功能?

回答

1

正確。視圖呈現在設計用作沙盒的閉包中。

$ this in a view should not work,but it like like in PHP 5.4 it will take a object in higher of the callstack,as ation給你請求,而不是View或你的控制器。這已經表明它不是可靠的使用,因爲這代表$將取決於調用堆棧。

即使您不使用模板引擎,在您的視圖中使用「邏輯」被認爲是不好的做法,除了生成HTML所需的邏輯之外。從控制器傳遞視圖所需的數據,或使用Viewmodel準備數據。

+0

有關在PHP 5.4中關閉綁定的更多信息:http://christophh.net/2011/10/26/closure-object-binding-in-php-54/ –

2

我不知道FuelPHP,但它看起來像模板包含在閉包內。由於PHP 5.4閉包可以綁定到一個對象並且有$this。默認情況下,它是創建閉包的對象。另見:https://stackoverflow.com/a/5734109/664108

相關問題