Rob*_*ght 46 php variables function
function parts($part) {
$structure = 'http://' . $site_url . 'content/';
echo($tructure . $part . '.php');
}
Run Code Online (Sandbox Code Playgroud)
此函数使用$site_url
在此页面顶部定义的变量,但此变量未传递到函数中.
我们如何让它在函数中返回?
Zbi*_*iew 101
添加第二个参数
您需要将其他参数传递给您的函数:
function parts($site_url, $part) {
$structure = 'http://' . $site_url . 'content/';
echo $structure . $part . '.php';
}
Run Code Online (Sandbox Code Playgroud)
在关闭的情况下
如果您更愿意使用闭包,那么您可以将变量导入当前范围(use
关键字):
$parts = function($part) use ($site_url) {
$structure = 'http://' . $site_url . 'content/';
echo $structure . $part . '.php';
};
Run Code Online (Sandbox Code Playgroud)
global
- 一个不好的做法
这篇文章经常被阅读,所以需要澄清一些事情global
.使用它被认为是一种不好的做法(参考这个和这个).
为了完整起见,这里的解决方案是使用global
:
function parts($part) {
global $site_url;
$structure = 'http://' . $site_url . 'content/';
echo($structure . $part . '.php');
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理是因为你必须告诉解释器你想要使用全局变量,现在它认为它是一个局部变量(在你的函数中).
建议阅读:
Joe*_*een 39
或者,您可以通过使用带use
关键字的闭包来从外部范围引入变量.
$myVar = "foo";
$myFunction = function($arg1, $arg2) use ($myVar)
{
return $arg1 . $myVar . $arg2;
};
Run Code Online (Sandbox Code Playgroud)
不要忘记,您也可以通过use
引用传递这些变量。
用例是当您需要use
在回调内部更改'd变量时(例如,从某个对象的源数组中生成不同对象的新数组)。
$sourcearray = [ (object) ['a' => 1], (object) ['a' => 2]];
$newarray = [];
array_walk($sourcearray, function ($item) use (&$newarray) {
$newarray[] = (object) ['times2' => $item->a * 2];
});
var_dump($newarray);
Run Code Online (Sandbox Code Playgroud)
现在$newarray
将包含(为简便起见,此处为伪代码) [{times2:2},{times2:4}]
。
相反,$newarray
不带&
修饰符使用将使外部$newarray
变量在闭包范围内是只读访问。但是$newarray
在闭包范围内将是一个完全不同的新创建的变量,仅存在于闭包范围内。
尽管两个变量的名称相同,但它们将是两个不同的变量。在这种情况下,外部$newarray
变量将[]
在代码完成之后包含在内。