简体   繁体   中英

PHP functions and variable scope in Smarty

I'm working within Smarty 2.6.27 . There is something that prevents PHP functions from accessing global variables:

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

  function test(){
    global $a;
    echo $a;
  }
  test();
{/php}

But the variable $a never makes it into the function. I've also done this:

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

  foreach ($GLOBALS as $key => $value) { 
     echo $key . "-" . $value;
  } 
{/php}

But again, $a does not make it into the list of PHP globals. It seems that this is because Smarty runs PHP in some odd context--for example, the documentation mentions this:

To access PHP variables in {php} blocks you will need to use the PHP global keyword.

I don't really need to get access to other PHP globals, and I don't particularly want the scope of variables created here to go wider, I simply need to figure out how to use variables defined outside of the functions in the function. There will be a lot of these variables, so passing them as parameters is impractical.

Firstly, for the record I strongly recommend avoiding both {php} blocks in Smarty, and global variables . Try to find some other solution to the underlying problem.

That out of the way, you quote this line from the manual, but you haven't followed its advice:

To access PHP variables in {php} blocks you will need to use the PHP global keyword.

What it means is this:

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

Without that, the variable $a is scoped to whatever function context the generated code is run in. There is no special consideration for "nested" functions or scopes in PHP, so a variable is either global, or visible only inside that one function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM