is_callable
(PHP 4 >= 4.0.6, PHP 5)
is_callable— 驗證變量的內(nèi)容是否能夠進行函數(shù)調(diào)用
Description(描述)
boolis_callable(callback$name[,bool$syntax_only= false[,string&$callable_name]] )
驗證變量的內(nèi)容是否能夠進行函數(shù)調(diào)用。可以用于檢查一個變量是否包含一個有效的函數(shù)名稱,或者一個包含經(jīng)過合適編碼的函數(shù)和成員函數(shù)名的數(shù)組。
Parameters(參數(shù))
name
既可以是一個字符串類型的函數(shù)名稱,也可以是一個對象和成員函數(shù)名的組合數(shù)組,比如:array($SomeOject, 'MethodName')
syntax_only
如果設置為true,那么只是驗證name是一個函數(shù)或者方法,函數(shù)僅僅會拒絕不是字符串,亦或是結(jié)構(gòu)不合法的數(shù)組作為回調(diào)函數(shù)。合法結(jié)構(gòu)是指一個包含兩個成員的數(shù)組,第一個是對象或者字符串,第二個是一個字符串。
callable_name
接收“調(diào)用名稱”,在下面的例子里它是“someClass::someMethod"。請注意盡管someClass::someMethod()是一個可調(diào)用的靜態(tài)方法,但是這里并不是真的表示一個靜態(tài)方法
如果可調(diào)用返回true,否則返回false。
Examples(例子)
<?php
functionsomeFunction()
{
}
$functionVariable = 'someFunction';
var_dump( is_callable($functionVariable, false, $callable_name) );// ? ?輸出為:bool(true)
echo $callable_name, "\n";? ? ? ? ? ? //? ? 輸出為: someFunction
class someClass {
? ? ? ? functionsomeMethod() ? {
? ? ? ? ?}
}
$anObject = new ?someClass();
$methodVariable = array($anObject, 'someMethod');
var_dump( is_callable($methodVariable, true, $callable_name) );//? 輸出為:bool(true)
echo $callable_name."\n";? ? ? ? ? ? ? ? //? ? 輸出為:someClass::someMethod
?>
區(qū)別:
function_exists 比較簡單點,就是判斷函數(shù)有沒有被定義。
method_exists 是判斷類內(nèi)的方法存不存在。
is_callable 檢測參數(shù)是否為合法的可調(diào)用結(jié)構(gòu)。
它們的返回值 都是 bool,但是參數(shù)不同。
function_exists只有一個參數(shù):函數(shù)名 $string
method_exists兩個參數(shù) :$object 類對象或$class類名稱,$string 方法名
is_callable三個參數(shù):$varmixed 可以是(string或者array) ,$syntax_only(bool),$callback_name(string)
如果is_callable的第一個參數(shù)是string,那么 和function_exists 相似 ;如果是數(shù)組則和 method_exists相似,但又有不同:
(1)method_exists不會考慮類方法的定義范圍public 、protected 、private,只要存在就返回true;而 is_callable 會在方法是被 protecte、 private時返回false。
(2)is_callable會去調(diào)用__call魔術方法來判斷,而method_exists不會。