PHP中是否存在is_closure()函数?如何判断变量是否为闭包?
PHP 判断变量是否为闭包的方法
问题背景
需要判断一个变量是闭包,还是字符串、数组这类普通类型。当前只能通过逐一排查的方式:
is_array($var) is_string($var) is_bool($var) is_null($var) is_resource($var) is_object($var) // 都不是?那默认是闭包?
想知道PHP有没有直接的is_closure()函数来做这个判断。
可行方案
PHP里没有全局的is_closure()函数,但有两种更直接且可靠的方式:
用
instanceof关键字判断
闭包在PHP中是Closure类的实例,直接通过类型匹配即可:if ($var instanceof Closure) { // 变量是闭包 }用
Closure::isClosure()静态方法
从PHP 5.4版本开始,Closure类提供了这个静态方法,专门用来检测变量是否为闭包实例:if (Closure::isClosure($var)) { // 变量是闭包 }
这两种方法都比逐一排除其他类型的写法更简洁,也能避免误判(比如其他自定义对象被当成闭包的情况)。
内容的提问来源于stack exchange,提问作者Doug Cassidy
相关产品推荐
相关产品推荐

