在一个PHP文件中,我有这段代码:
require_once $_SERVER['DOCUMENT_ROOT'] . '/custom/functions.php';
global $testVar;
var_dump($testVar);
在functions.php
文件中,我在开头就有这个,然后是其他一些函数:
function pr($s) {
echo '<pre>', htmlspecialchars(print_r($s,true)), '</pre>';
}
$testVar = 'hello world';
运行第一个文件时,变量返回NULL。我添加了global
位但是没有必要。这是Joomla模块的一部分,但我之前从未遇到包含文件的问题,它应该像常规PHP一样工作。为什么会发生这种情况?
答案 0 :(得分:1)
首先,尝试使用Joomla的路径常量,例如JPATH_BASE而不是$_SERVER['DOCUMENT_ROOT']
。 Joomla有很多有用的常量,请查看它的文档。
我已经阅读了你的答案,并阅读了php文档,我试图找到你需要两次使用global
关键字的原因。
首先,Variable scope。
The scope of a variable is the context within which it is defined. For the most
part all PHP variables only have a single scope.
(...)
However, within user-defined functions a local function scope is introduced.
Any variable used inside a function is by default limited to the local
function scope.
变量不在函数范围内,所以我们认为NULL是一种奇怪的行为。
但后来我读了include并找到了一些有趣的东西:
(...)
Any variables available at that line in the calling file will be available
within the called file, from that point forward. However, all **functions**
and **classes** defined in the included file have the global scope.
在本段中,我看不到有关变量是全局变量的任何提及。因此,当你想要使用像这样的全局变量时,你会发现解决方案是正确的事情。
在你的情况下,如果这样做很麻烦,我会创建一个简单的类。如果您的文件中只有辅助函数,请使用许多方法创建class Util{}
并将$ testVar作为属性。
答案 1 :(得分:0)
我找到了一个似乎有效的解决方案:在最初设置变量时,在我需要使用它之前使用global
关键字。
(但这非常麻烦,我仍然不确定为什么会这样,所以如果有人有更好的解决方案,请随时发帖。)