官方解釋:
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
is_callable — 檢測參數是否為合法的可調用結構。
說明
is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] ) : bool
驗證變量的內容能否作為函數調用。 這可以檢查包含有效函數名的變量,或者一個數組(包含了正確編碼的對象以及函數名,即稱為對象數組)。
參數
-
name
-
要檢查的回調函數。
-
syntax_only
-
如果設置為
TRUE
,這個函數僅僅驗證name
可能是函數或方法。 它僅僅拒絕非字符,或者未包含能用於回調函數的有效結構。有效的應該包含兩個元素,第一個是一個對象或者字符,第二個元素是個字符。 -
callable_name
-
接受“可調用的名稱”。下面的例子是“someClass::someMethod”。 注意,盡管 someClass::SomeMethod() 的含義是可調用的靜態方法,但例子的情況並不是這樣的。
返回值
如果 name
可調用則返回 TRUE
,否則返回 FALSE
。
例子說明:
怎么真正理解第二個參數,syntax_only。例子說明,如下:
例1.
判斷一個已定義的函數,判斷一個函數名的字符串
function f(){}
//f為函數名 var_dump(is_callable('f', false)); // bool(true) var_dump(is_callable('f', true)); // bool(true)
總結:判斷一個已定義的函數時,通過函數名判斷即可,不管第二個參數為 true ,還是false, is_callable返回值都為true.
例2.
只檢測格式,不檢測具體內容
//第2個參數為false,如果第一個參數是字符串,則需要檢測函數是否存在
var_dump(is_callable('不是方法名的字符串', false)); // bool(false)
//第2個參數為true,只檢測格式(字符串或者數組)即可,不檢測內容是否真的存在,或者可被調用
var_dump(is_callable('不是方法名的字符串', true)); // bool(true)
//第2個參數為false,如果第一個參數是數組,則需要檢測數組是否是可調用的對象數組
var_dump(is_callable( array('隨便寫,不是對象', '隨便寫,不是對象的方法名'), false)); // bool(false)
//第2個參數為true,只檢測格式(字符串或者數組)即可,不檢測內容是否真的存在,或者可被調用
var_dump(is_callable( array('隨便寫,不是對象', '隨便寫,不是對象的方法名'), true)); // bool(true)
這里直接判斷一個普通的字符串(非函數名),可以看見第二個參數的不同,返回的結果也不同。當第2個參數設置為true時,只要參數1是可能被調用的結構即可(字符串,或者數組),is_callable就返回true.
總結:第2個參數為true時,不會去檢查是否字串對應的函數是否真的存在,或者 數組對應的對象數組格式是否真的存在,而是檢查只要是字符串格式(函數名),或者 數組格式(數組對象)即可,也就是只是檢查是否是滿足條件的格式
簡單來說,就是第二個參數為true時,只檢查格式,不檢測內容(是否真的存在,是否真的可被調用)
例3.
嚴格檢測具體內容,第2個參數設置為false
function f(){} class someClass { function someMethod() { } } $anObject = new someClass(); //普通字符串(非函數名)格式 var_dump(is_callable('不是方法名的字符串', false)); // bool(false) //函數名字符串 var_dump(is_callable('f', false)); // bool(true) //數組格式 var_dump(is_callable( array('隨便寫,不是對象', '隨便寫,不是對象的方法名'), false)); // bool(false) //類名-方法數組格式 var_dump(is_callable( array('someClass', 'someMethod'), false)); // bool(true) //對象-方法數組格式 var_dump(is_callable( array($anObject, 'someMethod'), false)); // bool(true)
總結:第2個參數設置為false,默認值為false,不光要檢測格式,還要檢測內容是否真的存在,真的可被作為回調調用。