官方解释:


(PHP 4 >= 4.0.6, PHP 5, PHP 7)

is_callable — 检测参数是否为合法的可调用结构。

说明

is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] ) : bool

  

验证变量的内容能否作为函数调用。 这可以检查包含有效函数名的变量,或者一个数组(包含了正确编码的对象以及函数名,即称为对象数组)。

参数

name

要检查的回调函数。

syntax_only

如果设置为 TRUE,这个函数仅仅验证 name 可能是函数或方法。 它仅仅拒绝非字符,或者未包含能用于回调函数的有效结构。有效的应该包含两个元素,第一个是一个对象或者字符,第二个元素是个字符。

callable_name

接受“可调用的名称”。下面的例子是“someClass::someMethod”。 注意,尽管 someClass::SomeMethod() 的含义是可调用的静态方法,但例子的情况并不是这样的。

返回值

  如果 name 可调用则返回 TRUE,否则返回 FALSE

例子说明:


怎么真正理解第二个参数,syntax_only。例子说明,如下:

例1.

判断一个已定义的函数,判断一个函数名的字符串

function f(){}

//f为函数名
var_dump(is_callable('f', false)); // bool(true) var_dump(is_callable('f', true)); // bool(true)

  

 总结:判断一个已定义的函数时,通过函数名判断即可,不管第二个参数为 true ,还是false, is_callable返回值都为true.

例2.

只检测格式,不检测具体内容

//第2个参数为false,如果第一个参数是字符串,则需要检测函数是否存在
var_dump(is_callable('不是方法名的字符串', false)); // bool(false)
//第2个参数为true,只检测格式(字符串或者数组)即可,不检测内容是否真的存在,或者可被调用
var_dump(is_callable('不是方法名的字符串', true)); // bool(true)
//第2个参数为false,如果第一个参数是数组,则需要检测数组是否是可调用的对象数组
var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), false));  //  bool(false)
//第2个参数为true,只检测格式(字符串或者数组)即可,不检测内容是否真的存在,或者可被调用
var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), true)); // bool(true)

  

这里直接判断一个普通的字符串(非函数名),可以看见第二个参数的不同,返回的结果也不同。当第2个参数设置为true时,只要参数1是可能被调用的结构即可(字符串,或者数组),is_callable就返回true.

总结:第2个参数为true时,不会去检查是否字串对应的函数是否真的存在,或者 数组对应的对象数组格式是否真的存在,而是检查只要是字符串格式(函数名),或者 数组格式(数组对象)即可,也就是只是检查是否是满足条件的格式

简单来说,就是第二个参数为true时,只检查格式,不检测内容(是否真的存在,是否真的可被调用)

例3.

严格检测具体内容,第2个参数设置为false

function f(){}

class someClass {

  function someMethod()
{
} } $anObject = new someClass(); //普通字符串(非函数名)格式
var_dump(is_callable('不是方法名的字符串', false)); // bool(false) //函数名字符串
var_dump(is_callable('f', false)); // bool(true) //数组格式
var_dump(is_callable( array('随便写,不是对象', '随便写,不是对象的方法名'), false)); // bool(false) //类名-方法数组格式
var_dump(is_callable( array('someClass', 'someMethod'), false)); // bool(true) //对象-方法数组格式
var_dump(is_callable( array($anObject, 'someMethod'), false)); // bool(true)

  

总结:第2个参数设置为false,默认值为false,不光要检测格式,还要检测内容是否真的存在,真的可被作为回调调用。

最新文章

  1. java 存储到什么地方
  2. 中国Linux源镜像站大全
  3. 读 《JavaScript: The Good Parts》 有感
  4. BZOJ 1449 球队收益(最小费用最大流)
  5. Eclipse中Python插件PyDev的安装与配置流程
  6. python常用字符串操作
  7. [JS 基础] touchEvent中的changedTouches,targetTouches和touches的区别
  8. div中的img垂直居中
  9. Central Europe Regional Contest 2012 Problem J: Conservation
  10. oracle存储过程中文乱码问题
  11. TCP/IP 第二章
  12. windows下cmd命令行上传代码到github的指定库
  13. Linux 系统报错 rcu_preempt detected stalls on CPUs/tasks
  14. Vue脚手架使用步骤 2.9.6版本
  15. WDS 三种模式
  16. Azure SQL Database (22) Azure SQL Database支持中文值
  17. 【mysql】IP地址整数int和varchar的转换
  18. Python 自动化paramiko操作linux使用shell命令,以及文件上传下载linux与windows之间的实现
  19. js和jquery判断事件流
  20. 关于windows10 CMD 的一些操作

热门文章

  1. linux搭建代理服务器+蚁剑配置客户端代理
  2. 《Glibc内存管理》笔记DAY2
  3. markdown文件的基本常用编写语法
  4. P1964 【mc生存】卖东西
  5. wordpress插件开发流程梳理-二
  6. 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)
  7. SpringCloud学习成长之路七 高可用配置中心
  8. 常规函数模块CALL in new task 报错
  9. Laravel 项目开发环境配置
  10. python安装lnmp