亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP學習之深入理解is_callable()和method_exists()函數

2024-09-04 11:49:50
字體:
來源:轉載
供稿:網友

本篇文章主要介紹了PHP中的is_callable()和method_exists()函數,具有很高的學習價值,感興趣的朋友可以學習一下。

一、函數解析

is_callable()

定義:

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

is_callable — 檢測參數是否為合法的可調用結構

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

驗證變量的內容能否作為函數調用。 這可以檢查包含有效函數名的變量,或者一個數組,包含了正確編碼的對象以及函數名。

參數:

name

要檢查的回調函數。

syntax_only

如果設置為 TRUE,這個函數僅僅驗證 name 可能是函數或方法。 它僅僅拒絕非字符,或者未包含能用于回調函數的有效結構。有效的應該包含兩個元素,第一個是一個對象或者字符,第二個元素是個字符。

callable_name

接受“可調用的名稱”。下面的例子是“someClass::someMethod”。 注意,盡管 someClass::SomeMethod() 的含義是可調用的靜態方法,但例子的情況并不是這樣的。

返回值:

如果 name 可調用則返回 TRUE,否則返回 FALSE。

參考文獻: http://php.net/manual/zh/function.is-callable.php

二、函數測試

測試一:

  1. echo '<pre >'
  2.  
  3. $func = function ($a
  4.  
  5.  
  6.     echo $a
  7.  
  8. }; 
  9.  
  10. $re = is_callable($func, true, $callable_name1); 
  11.  
  12. echo '<hr />'
  13.  
  14. $re1 = is_callable($func, false, $callable_name2); 
  15.  
  16.  
  17.  
  18. //結果 
  19.  
  20. bool(true) 
  21.  
  22. string(17) "Closure::__invoke" 
  23.  
  24. ------------------------------------- 
  25.  
  26. bool(true) 
  27.  
  28. string(17) "Closure::__invoke" 

測試結果:

對于匿名函數,傳入函數變量后,參數二syntax_only true 和 false,打印結果是一樣的。

測試二:

  1. function c_b($d
  2.  
  3.  
  4.     echo $d
  5.  
  6.  
  7. $re = is_callable('c_b', false, $callable_name1); 
  8.  
  9. $re1 = is_callable('c_b', true, $callable_name2); 
  10.  
  11. var_dump($re); 
  12.  
  13. echo '<hr />'
  14.  
  15. var_dump($re1); 
  16.  
  17. echo '<hr />'
  18.  
  19. var_dump($callable_name1); 
  20.  
  21. echo '<hr />'
  22.  
  23. var_dump($callable_name2); 
  24.  
  25. //結果 
  26.  
  27. bool(true) 
  28.  
  29. ---------------- 
  30.  
  31. bool(true) 
  32.  
  33. ---------------- 
  34.  
  35. string(3) "c_b" 
  36.  
  37. ---------------- 
  38.  
  39. string(3) "c_b" 

測試結果:

對于一般函數,傳入函數名稱后,參數二syntax_only true 和 false,打印結果是一樣的。

測試三:

  1. class Person 
  2.  
  3.  
  4.     public static function get($a
  5.  
  6.     { 
  7.  
  8.         echo $a
  9.  
  10.     } 
  11.  
  12.  
  13.  
  14.     protected function _set() 
  15.  
  16.     { 
  17.  
  18.         echo 1; 
  19.  
  20.     } 
  21.  
  22.  
  23. $p = new Person(); 
  24.  
  25.  
  26.  
  27. $re = is_callable([$p'get'], false, $callable_name1); 
  28.  
  29. $re1 = is_callable([$p'get'], true, $callable_name2); 
  30.  
  31. var_dump($re); 
  32.  
  33. echo '<hr />'
  34.  
  35. var_dump($re1); 
  36.  
  37. echo '<hr />'
  38.  
  39. var_dump($callable_name1); 
  40.  
  41. echo '<hr />'
  42.  
  43. var_dump($callable_name2); 
  44.  
  45. //結果 
  46.  
  47. bool(true) 
  48.  
  49. ----------------- 
  50.  
  51. bool(true) 
  52.  
  53. ----------------- 
  54.  
  55. string(11) "Person::get" 
  56.  
  57. --------------------------- 
  58.  
  59. string(11) "Person::get" 

測試結果:

對于類的方法,參數以數組結構(類對象或類名稱 + 方法名稱),參數二syntax_only true 和 false,打印結果也是一樣的。

測試四:

  1. $a = 'i am string'
  2.  
  3. $re = is_callable($a, false, $callable_name1); 
  4.  
  5. $re1 = is_callable($a, true, $callable_name2); 
  6.  
  7. var_dump($re); 
  8.  
  9. echo '<hr />'
  10.  
  11. var_dump($re1); 
  12.  
  13. echo '<hr />'
  14.  
  15. var_dump($callable_name1); 
  16.  
  17. echo '<hr />'
  18.  
  19. var_dump($callable_name2); 
  20.  
  21. //結果 
  22.  
  23. bool(false) 
  24.  
  25. ---------------- 
  26.  
  27. bool(true) 
  28.  
  29. ---------------- 
  30.  
  31. string(11) "i am string" 
  32.  
  33. ------------------------- 
  34.  
  35. string(11) "i am string" 

測試結果:

對于傳入的驗證name,如果syntax_only 設置為true,它驗證傳入name是否是字符串,是否含有非法字符,如果不含有,則返回true,它并不會驗證name是否為合法調用結構。

測試五:

  1. $re = is_callable(['Class''Method'], false, $callable_name1); 
  2.  
  3. $re1 = is_callable(['Class''Method'], true, $callable_name2); 
  4.  
  5. var_dump($re); 
  6.  
  7. echo '<hr />'
  8.  
  9. var_dump($re1); 
  10.  
  11. echo '<hr />'
  12.  
  13. var_dump($callable_name1); 
  14.  
  15. echo '<hr />'
  16.  
  17. var_dump($callable_name2); 
  18.  
  19. //結果 
  20.  
  21. bool(false) 
  22.  
  23. -------------- 
  24.  
  25. bool(true) 
  26.  
  27. -------------- 
  28.  
  29. string(13) "Class::Method" 
  30.  
  31. ----------------------------- 
  32.  
  33. string(13) "Class::Method" 

測試結果:

對于傳入的驗證name,如果syntax_only 設置為true,它只驗證傳入name是否是字符串,是否含有非法字符或是否為數組參數字符串1 + 字符串二,如果符合條件,則返回true,它并不會驗證name是否為合法調用結構。否者返回false;

測試六:

  1. class Person 
  2.  
  3.  
  4.     public static function get($a
  5.  
  6.     { 
  7.  
  8.         echo $a
  9.  
  10.     } 
  11.  
  12.  
  13.  
  14.     protected function _set() 
  15.  
  16.     { 
  17.  
  18.         echo 1; 
  19.  
  20.     } 
  21.  
  22.  
  23. $p = new Person(); 
  24.  
  25. $re = is_callable([$p'_set'], false); 
  26.  
  27. var_dump($re); 
  28.  
  29. echo '<hr />'
  30.  
  31. $re1 = method_exists($p'_set'); 
  32.  
  33. var_dump($re1); 
  34.  
  35. //結果 
  36.  
  37. bool(false) 
  38.  
  39. ------------ 
  40.  
  41. bool(true) 

測試結果:

對于函數is_callable() 來說,如果驗證的類方法,訪問修飾符為protected或private 則返回false。

對于method_exists() 來說,則不受訪問修飾符的影響,只要類方法存在,則返回true。

三、總結、

1、is_callable() 函數,可傳入的name類型有:函數字符串,匿名函數變量,類或類對象和方法名稱組成的數組。其函數第二參數,如果是true,則只驗證name是否是字符串或則是類或字符串1(類對象)和字符串二(方法名稱)組成的數組。而不驗證name是否為合法調用結構。如果是false,則驗證name是否為合法調用結構。

2、method_exists() 函數,不受訪問修飾符的影響,只要類方法存在,則返回true。函數is_callable()來說,如果驗證的類方法,訪問修飾符為protected或private 則返回false。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88精品综合| 欧美超级乱淫片喷水| 久久99精品视频一区97| 大桥未久av一区二区三区| 欧美性猛交xxxx乱大交| 欧美日韩aaaa| 国产精品∨欧美精品v日韩精品| 国产成人精品电影久久久| 亚洲国产精品久久久久秋霞蜜臀| 国产日本欧美一区二区三区| 日本电影亚洲天堂| 亚洲综合av影视| 国产成+人+综合+亚洲欧美丁香花| 国产亚洲一级高清| 欧美一级淫片播放口| 亚洲片在线资源| 北条麻妃久久精品| 欧美激情在线狂野欧美精品| 久久免费高清视频| www.久久久久久.com| 国产午夜精品全部视频在线播放| 美女啪啪无遮挡免费久久网站| 欧美精品videosex性欧美| 日韩av手机在线观看| 日韩电影在线观看免费| 夜夜嗨av一区二区三区四区| 亚洲开心激情网| 日韩在线视频播放| 久久这里有精品视频| 国产成人精品免高潮在线观看| 色综合伊人色综合网| 亚洲精品自拍偷拍| 欧美精品成人在线| 欧美成人黄色小视频| 亚洲精品456在线播放狼人| 青青久久av北条麻妃黑人| 欧美日韩亚洲成人| 最近2019中文字幕第三页视频| 久久精品国产精品| 亚洲一区二区中文字幕| 日韩国产精品亚洲а∨天堂免| 热99在线视频| 亚洲伊人一本大道中文字幕| 国产精品久久久久秋霞鲁丝| 久久久久亚洲精品国产| 日日骚av一区| 午夜精品久久久久久久久久久久| 性欧美长视频免费观看不卡| 九九热精品视频在线播放| 成人黄色中文字幕| 97国产在线观看| 欧美日韩中文字幕| 亚洲精品99久久久久| 国产福利精品av综合导导航| 亚洲香蕉成视频在线观看| 国产欧美精品xxxx另类| 成人夜晚看av| 韩国国内大量揄拍精品视频| 国产精品一久久香蕉国产线看观看| 欧美多人爱爱视频网站| 亚洲欧美中文日韩在线| 亚洲精品少妇网址| 欧美亚洲另类在线| 69久久夜色精品国产69| 欧美精品videos| 国产第一区电影| www.欧美免费| 精品福利在线视频| 情事1991在线| 91高清在线免费观看| 国产精品久久久久久影视| 日韩女在线观看| 97热在线精品视频在线观看| 欧美资源在线观看| 中文字幕久热精品在线视频| 亚洲欧美国内爽妇网| 91视频九色网站| 久久天天躁狠狠躁夜夜av| 久久大大胆人体| 亚洲精品福利免费在线观看| 国产美女被下药99| 日韩精品在线观| 91在线视频精品| 欧美日韩午夜激情| 懂色av中文一区二区三区天美| 正在播放欧美一区| 久久韩剧网电视剧| 亚洲国产美女精品久久久久∴| 久久精品久久久久电影| 久久久999国产| 久久久噜噜噜久噜久久| 中文字幕精品—区二区| 国产成人精品网站| 最近2019免费中文字幕视频三| 亚洲欧美日韩天堂一区二区| 欧美一区二区大胆人体摄影专业网站| 亚洲网站视频福利| 亚洲福利精品在线| 亚洲欧美一区二区精品久久久| 欧美日韩中文字幕日韩欧美| 国产精品亚洲网站| 在线精品国产成人综合| 亚洲视频在线播放| 九色精品美女在线| 欧美黑人xxxⅹ高潮交| 日韩高清av在线| 亚洲午夜国产成人av电影男同| 国内精品久久久久影院 日本资源| 国产精品一区二区三区久久久| 色偷偷av一区二区三区| 亚洲视频在线视频| 久久成人免费视频| 久久这里只有精品视频首页| 欧美日韩在线视频观看| 国产精品久久久久久久久久三级| 亚洲片国产一区一级在线观看| 亚洲精品日韩丝袜精品| 欧美天堂在线观看| 亚洲免费福利视频| 亚洲福利影片在线| 91国产精品视频在线| 国产激情综合五月久久| 亚洲天堂网站在线观看视频| 日韩亚洲精品电影| 日本欧美一二三区| 伊人久久久久久久久久久| 91在线直播亚洲| 亚洲精品美女在线观看| 亚洲一区二区久久| 日本午夜人人精品| 亚洲欧洲国产精品| zzijzzij亚洲日本成熟少妇| 欧美怡红院视频一区二区三区| 国产精品永久免费观看| 久久91亚洲精品中文字幕| 久久这里有精品视频| 欧美另类69精品久久久久9999| 亚洲欧美日韩一区在线| 国产欧美最新羞羞视频在线观看| 久久99国产精品久久久久久久久| 亚洲精品999| 久久人91精品久久久久久不卡| 日韩av电影在线播放| 亚洲免费福利视频| 青青草成人在线| 在线亚洲欧美视频| 91久久精品日日躁夜夜躁国产| 欧美高清性猛交| 91亚洲精品在线观看| 亚洲香蕉伊综合在人在线视看| 精品亚洲va在线va天堂资源站| 91欧美日韩一区| 国产999精品视频| 亚洲成人a**站| 久久偷看各类女兵18女厕嘘嘘| 久久99精品久久久久久琪琪| 另类少妇人与禽zozz0性伦| 66m—66摸成人免费视频| 欧美影院久久久| 久久亚洲电影天堂| 岛国av一区二区| 欧美激情二区三区| 日韩av在线电影网| 欧美视频免费在线观看|