理解 is_callable


官方解釋:


 

(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,不光要檢測格式,還要檢測內容是否真的存在,真的可被作為回調調用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM