我使用的是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框架中的全局变量无论如何都是个坏主意。