深刻掌握is_callable和method_exists

 

class someClass {

测试四:

        functionsomeMethod()   {

定义:

boolis_callable美高梅集团4688,(callback$name[,bool$syntax_only=
false[,string&$callable_name]] )

 

}

 

$functionVariable = ‘someFunction’;

① 、函数解析

既可以是三个字符串类型的函数名称,也足以是一个目的和分子函数名的组合数组,比如:array($SomeOject,
‘MethodName’)

www.4688com,is_callable — 检测参数是不是为合法的可调用结构

(PHP 4 >= 4.0.6, PHP 5)

如果 name 可调用则赶回 TRUE,否则再次回到 FALSE

functionsomeFunction()

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

is_callable

参数:

Return Values(返回值)

贰 、函数测试

?>

表明变量的内容是不是作为函数调用。
那可以检查包罗有效函数名的变量,大概1个数组,包涵了正确编码的目的以及函数名。

区别:

美高梅手机版登录,function_exists 相比简单点,就是判定函数有没有被定义。

method_exists 是判定类内的格局存不存在。

is_callable 检测参数是或不是为官方的可调用结构。

它们的回到值 都以 bool,可是参数差距。

function_exists唯有1个参数:函数名 $string

method_exists五个参数 :$object 类对象或$class类名称,$string 方法名

is_callable几个参数:$varmixed 可以是(string只怕array)
,$syntax_only(bool),$callback_name(string)

如果is_callable的第③个参数是string,那么 和function_exists 相似
;假设是数组则和 method_exists相似,但又有差别:

(1)method_exists不会考虑类格局的定义范围public 、protected
、private,只要存在就赶回true;而 is_callable 会在措施是被 protecte、
private时重临false。

(2)is_callable会去调用__call魔术方法来判定,而method_exists不会。

对于类的形式,参数以数组社团(类对象或类名称 +
方法名称),参数二syntax_only true 和
false
,打印结果也是一律的。

}

测试五:

var_dump( is_callable($methodVariable, true, $callable_name) );// 
输出为:bool(true)

bool is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]]
)

Examples(例子)

 

         }

 三、总结、

var_dump( is_callable($functionVariable, false, $callable_name) );//
   输出为:bool(true)

测试结果:

采纳“调用名称”,在底下的事例里它是“someClass::someMethod”。请小心尽管someClass::someMethod()是壹个可调用的静态方法,可是这里并不是当真表示一个静态方法

class Person
{
    public static function get($a)
    {
        echo $a;
    }

    protected function _set()
    {
        echo 1;
    }
}
$p = new Person();

$re = is_callable([$p, 'get'], false, $callable_name1);
$re1 = is_callable([$p, 'get'], true, $callable_name2);
var_dump($re);
echo '<hr />';
var_dump($re1);
echo '<hr />';
var_dump($callable_name1);
echo '<hr />';
var_dump($callable_name2);
//结果
bool(true)
-----------------
bool(true)
-----------------
string(11) "Person::get"
---------------------------
string(11) "Person::get"

echo $callable_name.”\n”;                //   
输出为:someClass::someMethod

 

callable_name

要反省的回调函数。

echo $callable_name, “\n”;            //    输出为: someFunction

对于method_exists() 来说,则不受访问修饰符的震慑,只要类方式存在,则赶回true。

is_callable— 验证变量的内容是不是可以举行函数调用

对于一般函数,传入函数名称后,参数二syntax_only true 和 false,打印结果是如出一辙的。

要是可调用再次回到true,否则重临false。

callable_name

<?php

 

Parameters(参数)

测试结果:

$anObject = new  someClass();

测试结果:

即便设置为true,那么只是验证name是1个函数或然措施,函数仅仅会拒绝不是字符串,亦可能结构不合规的数组作为回调函数。合法社团是指2个饱含多个成员的数组,首个是目的或者字符串,第三个是3个字符串。

测试三:

$methodVariable = array($anObject, ‘someMethod’);

相关文章