PHP函数/方法存在性检查小结

有些时候,如require文件(避免重复包含某一函数)、选择性调用函数(根据已加载模块调用不同的方法)时,需要检查函数或者方法是否存在,主要借助以下函数:

 

(1)bool function_exists( string $function_name )

       检查函数是否存在,主要针对面向过程函数,内置函数或者用户定义函数;

       对于语法结构,如include_once、echo,其返回false;

var_dump(function_exists ('var_dump'));       // true
var_dump(function_exists ('echo'));           // false
var_dump(function_exists ('include_once'));   // false

 

(2)bool method_exists ( object $object , string $method_name )

        检查类的方法是否存在,$object可以是类实例或者类名,两者之间没有任何区别;

        如果检查类不是已知类,调用此函数会使用任何已注册的autoloader;

        此方法不会检查方法是否可以被调用;

class Test
{
    public function pub_func ()
    {
        print_r(__METHOD__);
    }
    private function pri_func ()
    {
        print_r(__METHOD__);
    }
    public function __call ($name, $args)
    {
        print_r(__METHOD__);
    }
}

var_dump(method_exists ('Test', 'pub_func')); // true
var_dump(method_exists ('Test', 'pri_func')); // true
var_dump(method_exists ('Test', 'not_func')); // false
$t = new Test();
var_dump(method_exists ($t, 'pub_func')); // true
var_dump(method_exists ($t, 'pri_func')); // true
var_dump(method_exists ($t, 'not_func')); // false

 

(3)bool is_callable ( mixed $var [, bool $syntax_only [, string $callable_name ]] )

        检测参数是否为合法的可调用结构,既可用于检查普通函数,也可以用于检查类方法;

        $syntax_only默认为false;

        以类名为参数,且$syntax_only为false时,会尝试调用该方法(仅从可访问性方面,不检测__call),若方法不可访问(private),会出现Fatal error;

        在$syntax_only为true,或者以实例为参数时,__call也会纳入检查;

var_dump(is_callable (array( 'Test', 'pub_func')));        // true
var_dump(is_callable (array( 'Test', 'pub_func'), true));  // true
var_dump(is_callable (array( 'Test', 'pri_func')));        // PHP Fatal error: Call to private method Test::pri_func()
var_dump(is_callable (array( 'Test', 'pri_func'), true));  // true
var_dump(is_callable (array( 'Test', 'not_func')));        // false
var_dump(is_callable (array( 'Test', 'not_func'), true));  // true
$t = new Test();
var_dump(is_callable (array( $t, 'pub_func')));         // true
var_dump(is_callable (array( $t, 'pub_func'), true));   // true
var_dump(is_callable (array( $t, 'pri_func')));         // true
var_dump(is_callable (array( $t, 'pri_func'), true));   // true
var_dump(is_callable (array( $t, 'not_func')));         // true
var_dump(is_callable (array( $t, 'not_func'), true));   // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值