我在Smarty 2.6.27内工作。有些东西会阻止PHP函数访问全局变量:
{php}
$a = "should be global";
function test(){
global $a;
echo $a;
}
test();
{/php}
但变量$a
从未进入函数。我也这样做了:
{php}
$a = "should be global";
foreach ($GLOBALS as $key => $value) {
echo $key . "-" . $value;
}
{/php}
但同样,$a
没有进入PHP全局列表。这似乎是因为Smarty在一些奇怪的上下文中运行PHP - 例如,the documentation mentions这个:
要访问{php}块中的PHP变量,您需要使用PHP 全球关键字。
我真的不需要访问其他PHP全局变量,我并不特别希望这里创建的变量范围更广泛,我只需要弄清楚如何使用函数之外定义的变量< em> in 该函数。这些变量会有 lot ,因此将它们作为参数传递是不切实际的。
答案 0 :(得分:0)
首先,对于记录,我强烈建议避免Smarty中的{php}
块和全局变量。尝试找到潜在问题的其他解决方案。
除此之外,你从手册中引用这一行,但你没有听从它的建议:
要访问{php}块中的PHP变量,您需要使用PHP全局关键字。
这意味着:
{php}
global $a;
$a = "should be global";
{/php}
如果没有它,变量$a
的范围将限定运行生成代码的任何函数上下文。对PHP中的“嵌套”函数或作用域没有特别的考虑,因此变量是全局的,或者是可见的只在那个功能里面。