2012-03-30 43 views
0

我使用PHP 5.3.8和CakePHP 2.1.1。「全局」在CakePHP 2.1.1中不起作用

這是我的看法(佈局是空的,實際上它僅輸出視圖本身)

<?php 
// $present is not a view variable 
$present = 'Hello World!'; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     global $present; 
     exit(var_dump($present)); 
    } 
} 


$pdf = new ApplicationsPDF(); 
$pdf->CreateApplicationTable(); 
?> 

輸出是null代替的「Hello World!」。

如果我將這段代碼複製並粘貼到一個單獨的文件(我直接從瀏覽器運行),它就完美了!

所以它必須是一個CakePHP錯誤。有人知道嗎?

+0

我無法想象這個重要的bug以前沒有被捕獲過,但在5.3.9+更新日誌中沒有任何關於它的內容。我必須想象這是關於你當地的環境。你是否在使用auto_prepend_file來闖入任何東西? – 2012-03-30 17:39:00

+0

不,但上面的代碼是從CakePHP 2.1.1運行的。我只是發現代碼完全獨立運行。我將編輯該問題。 (我知道Stackoverflow不是一個錯誤跟蹤器,但我不想刪除這個問題) – ComFreek 2012-03-30 17:41:20

+0

我知道這不是重點,但爲什麼你認爲你需要使用全局變量?爲什麼不將'$ present'傳遞給構造函數並設置一個類變量? – 2012-03-30 17:47:30

回答

0

這不是一個PHP也不是CakePHP的錯誤!

這是因爲CakePHP在其視圖類中包含了視圖,因此聲明的變量並不在全局範圍內,並且global沒有任何作用。

從ADmad(source):

當您通過自身運行該文件,你的任務$的testvar = '您好! 世界'是在全球範圍內,因此事情就像你期望的那樣工作,即 。但是當它被用作視圖文件時,該文件包含在一個 View類函數中,因此它不再位於全局上下文中,並且$ testVar 不再是全局變量,因此您的期望不正確。無論如何,在OOP框架中使用 全局變量是一個壞主意。

0

嘗試類定義之前聲明全局關鍵字:

global $present; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     exit(var_dump($present)); 
    } 
} 
+0

這不起作用,並在'CreateApplicationTable()'中給我一個'Undefined variable'錯誤。 – ComFreek 2012-03-30 17:47:14

+0

您沒有刪除'$ present'變量聲明部分,是嗎? – 2012-03-30 17:48:45

+0

我沒有,但是'$ present'永遠不會被定義(它不是一個視圖變量)。 – ComFreek 2012-03-30 17:50:54