PHP中的is_callable()与method_exists()函数-php教程

资源魔 39 0

正在不少产物使用中,咱们常常可以看到如下这类用法,它用来反省一个工具里的办法能否存正在。

<?php
if (method_exists($object, 'SomeMethod')) {   
    $object->SomeMethod($this, TRUE); 
}
?

这段代码的目的比拟容易了解,有一个工具为$object,咱们想晓得它能否有一个办法为SomeMethod,假如有,就挪用此办法。

这个代码看起来正确,并且正在年夜局部的时分运转也会失常。然而假如这个$object工具的办法关于以后的运转环境是不成见的,顺序还能失常运转吗?正如这个函数名办法存正在同样,只是对咱们提供的类或工具反省能否有咱们所希冀的办法,假如有,就前往TRUE,假如不,就前往FALSE,这里并无思考可见性的成绩。以是,当你恰恰判别一个公有或许受维护的办法时,你可以失去一个正确的前往,然而执行的时分,会失去一个“Fatal Error”谬误正告。

下面这段代码的真正用意应该了解为:关于提供的类或许工具,咱们是否正在以后的作用域中挪用它的SomeMethod办法。而这恰是is_callable()函数存正在的目的。is_callable()函数接纳一个回调参数,能够指定一个函数称号或许一个蕴含办法名以及工具的数组,假如正在以后作用域中能够执行,就前往TRUE。

<?php
if (is_callable(array($object, 'SomeMethod'))) {
      $object->SomeMethod($this, TRUE); 
}?>

上面来举个例子来讲明二者的区分

<?php
class 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 />';
}

执行下面的剧本后,咱们会明晰地看到两个函数间的差异。

is_callable()另有其余的用法,例如,没有反省所提供的类或办法,只反省函数或办法的语法能否正确。像method_exists()同样,is_callable()能够触发类的主动加载。

假如一个工具存正在魔术办法__call,正在进行办法判别时method_exists()会前往FALSE,而is_callable()会前往TRUE。

<?php
class 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 />';

运转后果

Calling object method runtest in object context 
bool(false) bool(true)

1.jpg

保举:PHP视频教程

以上就是PHP中的is_callable()与method_exists()函数的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 is_callable() method_exists()

抱歉,评论功能暂时关闭!