百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP中的is_callable()与method_exists()函数
分享文章到:

PHP中的is_callable()与method_exists()函数

发布时间:09/01 来源:未知 浏览: 关键词:

在许多产品利用中,我们经常能够看到以下这种用途,它用来检查一个对象里的办法可否存在。

<?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()函数的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板