php is_callable的用法以及和function_exists,method_exists的區(qū)別

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)方法

Return Values(返回值)

如果可調(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不會。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容