";全局“;在CakePHP 2.1.1视图中不起作用


"global" does not work in CakePHP 2.1.1 views

我使用的是PHP 5.3.8和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错误。有人知道吗?

尝试在类定义之前声明全局关键字:

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

这不是PHP,也不是CakePHP错误!

这是因为CakePHP在其视图类中包含了视图,所以声明的变量实际上不在全局范围内,global也没有影响。

来自ADmad(来源):

当你自己运行文件时,你的赋值$testVar='Hello世界!"是在全球范围内,因此事情会像你预期的那样运作到。但当它用作视图文件时,该文件包含在查看类函数,因此它不再在全局上下文中并且$testVar不再是全局var,因此您的期望是不正确的。使用OOP框架中的全局变量无论如何都是个坏主意。