如何解决5.3版之前的函数闭包是否可以使用\'use\'关键字?
| 地狱,我什至无法在PHP网站上找到\'use \'的文档(除了在名称空间的上下文中-很好地将关键字BTW歧义了)。 有人可以确认function() use ($foo) { }
仅在5.3及更高版本中可用吗?您在哪里找到该文件?
另外,您将如何编码无法使用\'use \'的代码(例如,使用create_function($ args,$ funcname)作为array_map()的回调)?
解决方法
在5.3中引入了闭包,因此在5.3或更高版本中(当然)也提供了与闭包结合的“ 1”。
另外一个好处是,如何在闭包内无法使用\'use \'进行编码
我不完全理解这个问题,但是因为闭包和带有闭包的
use
都具有相同的版本,所以不会出现不能将ѭ1带有闭包的情况。两者皆有,或一无所有(-> <5.3)
http://php.net/functions.anonymous
发行说明5.3.0
, 在没有闭包的情况下,在5.3之前的版本中,如果要避免create_function()但需要将外部作用域中的变量绑定到回调类型函数,请将函数包装在一个类中,您可以将外部变量传递给该类实例化。
如果您经常这样做,您可能会发现以下通用包装器类很有用(或者很丑,或者像我一样):
class GenericCallbackWrapper {
function __construct (){
$argIndex = 1;
foreach(func_get_args() as $value){
$argName = \'user\' . $argIndex;
$this->$argName = $value;
}
}
public function example_strip_prefix($a){
return substr($a,strlen($this->user1));
}
}
实际上,我会将其放在外部文件(callbacks.php)中,然后继续将回调代码添加为此类的公共方法。显然,仅当您要频繁执行此操作时,它才会派发股息。否则,只需创建一个一次性包装器类,其构造函数将接受要包含的特定数量的参数。
然后,可以使用两个参数的形式来利用此通用代码来指定回调:
function get_input_field_IDs_by_prefix($prefix){
return array_map(
array(new GenericCallbackWrapper($prefix),\'example_strip_prefix\'),preg_grep(\'/^\'.$prefix.\'/\',array_keys($_REQUEST))
);
}
通用包装器接受任意数量的参数,并将它们作为成员(实例)变量添加到类中,然后可以按$ this-> user1,$ this-> user2等(初始索引为1)的顺序对其进行访问。
希望这对某人有用。在某一点。也许。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。