正在不少产物使用中,咱们常常可以看到如下这类用法,它用来反省一个工具里的办法能否存正在。
<?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)
保举:PHP视频教程
以上就是PHP中的is_callable()与method_exists()函数的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 is_callable() method_exists()