1

我在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 ——例如,文档中提到了这一点:

要访问 {php} 块中的 PHP 变量,您需要使用 PHP 全局关键字。

我真的不需要访问其他 PHP 全局变量,我也不特别希望这里创建的变量范围更广,我只需要弄清楚如何使用函数函数之外定义的变量。这些变量会有很多,因此将它们作为参数传递是不切实际的。

4

1 回答 1

0

首先,作为记录,我强烈建议避免{php}Smarty 和 global variables 中的两个块。尝试为潜在问题找到其他解决方案。

顺便说一句,您从手册中引用了这一行,但您没有遵循它的建议:

要访问 {php} 块中的 PHP 变量,您需要使用 PHP 全局关键字。

它的意思是这样的:

{php}
  global $a;
  $a = "should be global";
{/php}

没有它,该变量$a的作用域是生成的代码在其中运行的任何函数上下文。PHP 中的“嵌套”函数或作用域没有特殊考虑,因此变量要么是全局的,要么仅在该函数内部可见。

于 2013-10-19T22:26:34.403 回答