bool is_callable ( mixed $var [, bool $syntax_only [, string $callable_name ]] )
is_calleable是测参数是否为合法的可调用结构
第一个参数可以是函数名,可以是类或对象和方法数组。
第二个参数是否对方法名只做语法检查,不判断是否可以调用,默认false
第三个参数是将调用的名称传人一个变量中,感觉不咋常用
//判断方法是否能调用 function test(){}; $a = function(){}; $b = "test"; var_dump(is_callable("test")); //true var_dump(is_callable($a)); //true var_dump(is_callable($b)); //true var_dump(is_callable("mock")); //false 一个不存在的函数 var_dump(is_callable("mock", true)); //true 只检查函数的语法 class TestClass { public function testMethod(){} protected function protectedMethod(){} private function privateMethod(){} } $obj = new TestClass(null); var_dump(is_callable(array("TestClass", 'testMethod')));//true 类方法 var_dump(is_callable(array($obj, 'testMethod')));//true 对象方法 var_dump(is_callable(array("TestClass", 'testMethod2')));//false 不存在的类方法 var_dump(is_callable(array("TestClass", 'testMethod2'), true));//true var_dump(is_callable(array("TestClass", 'protectedMethod')));//false 受保护的类方法 var_dump(is_callable(array("TestClass", 'protectedMethod'), true));//true 只检查语法 var_dump(is_callable(array("TestClass", 'privateMethod')));//false 私有类方法 var_dump(is_callable(array("TestClass", 'privateMethod'), true));//true var_dump(is_callable(array($obj, 'privateMethod'), false, $name));//true echo $name;//TestClass::privateMethod
function_exists (string$function_name
)
从参数可以看出传人的是一个函数的名字,不能传类或者对象方法。
bool method_exists ( object $object , string $method_name )
判断类或者对象方法是否存在,手册上object得类型提示有些不准确,传类的名字作为参数其实也行。
class TestClass { public function testMethod(){} protected function protectedMethod(){} private function privateMethod(){} } $obj = new TestClass(null); var_dump(method_exists($obj, "testMethod"));//true 类方法 var_dump(method_exists("TestClass", "testMethod"));//true 类方法 var_dump(method_exists("TestClass", "protectedMethod"));//true受保护类方法 var_dump(method_exists("TestClass", "privateMethod"));//true私有类方法is_callable和method_exits在判断类方法时有一个区别,默认下is_callable函数要判断该方法能不能被正常调用,想protected和private方法返回的都是false,而method_exits就如它的名字所示,只是判断该方法是否存在,而不管能不能调用。