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.