匿名函数 – 声明全局变量和在php中使用之间的区别是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了匿名函数 – 声明全局变量和在php中使用之间的区别是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1637字,纯文字阅读大概需要3分钟。
内容图文
![匿名函数 – 声明全局变量和在php中使用之间的区别是什么?](/upload/InfoBanner/zyjiaocheng/745/63d6c04a6edb4c5cb5a9ba9fa7bd6f29.jpg)
在学习PHP中的匿名函数时,我遇到了这个问题:
Anonymous functions can use the variables defined in their enclosing
scope using the use syntax.
例如:
$test = array("hello", "there", "what's up");
$useRandom = "random";
$result = usort($test, function($a, $b) use ($useRandom){
if($useRandom=="random")
return rand(0,2) - 1;
else
return strlen($a) - strlen($b);
}
);
为什么我不能像以下一样将$useRandom全局化?
$test2 = array("hello", "there", "what's up");
$useRandom = "random";
$result = usort($test, function($a, $b){
global $useRandom;
if($useRandom=="random")
return rand(0,2) - 1;
else
return strlen($a) - strlen($b);
}
);
这两种方法有什么区别?
解决方法:
您的示例有点简化.为了获得差异,请尝试将示例代码包装到另一个函数中,从而围绕内部回调创建一个额外的范围,这不是全局的.
在下面的示例中,$useRandom在排序回调中始终为null,因为没有名为$useRandom的全局变量.您将需要使用use来从不是全局范围的外部作用域访问变量.
function test()
{
$test = array( "hello", "there", "what's up" );
$useRandom = "random";
$result = usort( $test, function ( $a, $b ) {
global $useRandom;
// isset( $useRandom ) == false
if( $useRandom == "random" ) {
return rand( 0, 2 ) - 1;
}
else {
return strlen( $a ) - strlen( $b );
}
}
);
}
test();
另一方面,如果存在全局变量$useRandom,则只能使用一个范围向下访问它.在下一个示例中,$useRandom再次为null,因为它定义了两个范围“更高”,而use关键字仅在当前范围之外直接从范围导入变量.
$useRandom = "random";
function test()
{
$test = array( "hello", "there", "what's up" );
$result = usort( $test, function ( $a, $b ) use ( $useRandom ) {
// isset( $useRandom ) == false
if( $useRandom == "random" ) {
return rand( 0, 2 ) - 1;
}
else {
return strlen( $a ) - strlen( $b );
}
}
);
}
test();
内容总结
以上是互联网集市为您收集整理的匿名函数 – 声明全局变量和在php中使用之间的区别是什么?全部内容,希望文章能够帮你解决匿名函数 – 声明全局变量和在php中使用之间的区别是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。