JP *_*Lew 5 php scope global function
我希望我的函数能够专门从其父函数访问外部变量.但是,使用global关键字设置范围太广; 我需要限制它.如何让这段代码吐出'Level 2'而不是'Level 1'?我必须上课吗?
<?php
$a = "Level 1";
function first() {
$a = "Level 2";
function second() {
global $a;
echo $a.'<br />';
}
second();
}
first();
//outputs 'Level 1'
?>
Run Code Online (Sandbox Code Playgroud)
Wis*_*guy 28
仅仅是为了举例,如果我理解你要做什么,你可以使用一个闭包(PHP 5.3+),因为" 闭包也可以使用use关键字从父作用域继承变量 " .
$a = "Level 1";
function first() {
$a = "Level 2";
$func = function () use ($a) {
echo $a.'<br />';
};
$func();
}
first();
// prints 'Level 2<br />'
Run Code Online (Sandbox Code Playgroud)
闭包最常用于回调函数.但是,这可能不是使用它的最佳方案.正如其他人所说的那样,仅仅因为你可以做某事并不意味着它是最好的主意.
dec*_*eze 12
PHP没有嵌套函数或作用域的概念,嵌套函数是一种可怕的做法.会发生什么是PHP只是遇到函数声明并创建一个正常的函数second.如果你first再次尝试调用,PHP将再次遇到函数声明second和崩溃,因为该函数second已经声明.因此,不要在函数内声明函数.
至于传递值,要么显式地将它们作为函数参数传递,要么如果有意义的话,创建一个类.