2012-03-30 67 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