is_callable
(PHP 4 >= 4.0.6, PHP 5)
is_callable— 验证变量的内容是否能够进行函数调用
Description(描述)
boolis_callable(callback$name[,bool$syntax_only= false[,string&$callable_name]] )
验证变量的内容是否能够进行函数调用。可以用于检查一个变量是否包含一个有效的函数名称,或者一个包含经过合适编码的函数和成员函数名的数组。
Parameters(参数)
name
既可以是一个字符串类型的函数名称,也可以是一个对象和成员函数名的组合数组,比如:array($SomeOject, 'MethodName')
syntax_only
如果设置为true,那么只是验证name是一个函数或者方法,函数仅仅会拒绝不是字符串,亦或是结构不合法的数组作为回调函数。合法结构是指一个包含两个成员的数组,第一个是对象或者字符串,第二个是一个字符串。
callable_name
接收“调用名称”,在下面的例子里它是“someClass::someMethod"。请注意尽管someClass::someMethod()是一个可调用的静态方法,但是这里并不是真的表示一个静态方法
如果可调用返回true,否则返回false。
Examples(例子)
<?php
functionsomeFunction()
{
}
$functionVariable = 'someFunction';
var_dump( is_callable($functionVariable, false, $callable_name) );// 输出为:bool(true)
echo $callable_name, "\n"; // 输出为: someFunction
class someClass {
functionsomeMethod() {
}
}
$anObject = new someClass();
$methodVariable = array($anObject, 'someMethod');
var_dump( is_callable($methodVariable, true, $callable_name) );// 输出为:bool(true)
echo $callable_name."\n"; // 输出为:someClass::someMethod
?>
区别:
function_exists 比较简单点,就是判断函数有没有被定义。
method_exists 是判断类内的方法存不存在。
is_callable 检测参数是否为合法的可调用结构。
它们的返回值 都是 bool,但是参数不同。
function_exists只有一个参数:函数名 $string
method_exists两个参数 :$object 类对象或$class类名称,$string 方法名
is_callable三个参数:$varmixed 可以是(string或者array) ,$syntax_only(bool),$callback_name(string)
如果is_callable的第一个参数是string,那么 和function_exists 相似 ;如果是数组则和 method_exists相似,但又有不同:
(1)method_exists不会考虑类方法的定义范围public 、protected 、private,只要存在就返回true;而 is_callable 会在方法是被 protecte、 private时返回false。
(2)is_callable会去调用__call魔术方法来判断,而method_exists不会。