(PHP 4, PHP 5, PHP 7)
method_exists — 检查类的方法是否存在
说明
bool method_exists ( mixed $object , string $method_name )
检查类的方法是否存在于指定的 object中。
参数
object
对象示例或者类名。
method_name
方法名。
返回值
如果 method_name 所指的方法在 object 所指的对象类中已定义,则返回 TRUE,否则返回 FALSE。
(PHP 4 >= 4.0.6, PHP 5)
is_callable — 验证变量的内容是否能够进行函数调用
Description
bool is_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()是一个可调用的静态方法,但是这里并不是真的表示一个静态方法
Return Values(返回值)
如果可调用返回true,否则返回false。
if ( is_callable( array( $obj, $method ) ) ) { /*要操作的代码段*/ }
if ( method_exists( $obj, $method ) ) { /*要操作的代码段*/ }
这段代码的目的比较容易理解,有一个对象为$object,我们想知道它是否有一个方法为SomeMethod,如果有,就调用此方法。<?phpif (method_exists($object, 'SomeMethod')) {
$object->SomeMethod($this, TRUE);
}?>
下面来举个例子来说明两者的区别<?phpif (is_callable(array($object, 'SomeMethod'))) {
$object->SomeMethod($this, TRUE);
}?>
执行上面的脚本后,我们会清晰地看到两个函数间的差别。<?phpclass Foo {
public function PublicMethod(){}
private function PrivateMethod(){}
public static function PublicStaticMethod(){}
private static function PrivateStaticMethod(){}
}$foo = new Foo();$callbacks = array(
array($foo, 'PublicMethod'),
array($foo, 'PrivateMethod'),
array($foo, 'PublicStaticMethod'),
array($foo, 'PrivateStaticMethod'),
array('Foo', 'PublicMethod'),
array('Foo', 'PrivateMethod'),
array('Foo', 'PublicStaticMethod'),
array('Foo', 'PrivateStaticMethod'),
);foreach ($callbacks as $callback){
var_dump($callback);
var_dump(method_exists($callback[0], $callback[1]));
var_dump(is_callable($callback));
echo str_repeat('-', 10);
echo '<br />';
}
运行结果<?phpclass MethodTest {
public function __call($name, $arguments){
echo 'Calling object method ' . $name . ' ' .implode(', ', $arguments); echo '<br />';
}
}$obj = new MethodTest();$obj->runtest('in object context');
var_dump(method_exists($obj,'runtest'));
var_dump(is_callable(array($obj,'runtest')));echo '<br />';
以上就是php中is_callable()与method_exists()函数具体区别介绍的详细内容
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛