今天小編給大家分享的是關(guān)于PHP中is_callable()與method_exists()函數(shù)的用法,很多人都不太了解,今天小編為了讓大家更加了解PHP,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)高邑,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
在很多產(chǎn)品應(yīng)用中,我們經(jīng)常能夠看到以下這種用法,它用來檢查一個(gè)對象里的方法是否存在。
<?php if (method_exists($object, 'SomeMethod')) { $object->SomeMethod($this, TRUE); } ?
這段代碼的目的比較容易理解,有一個(gè)對象為$object,我們想知道它是否有一個(gè)方法為SomeMethod,如果有,就調(diào)用此方法。
這個(gè)代碼看起來正確,而且在大部分的時(shí)候運(yùn)行也會正常。但是如果這個(gè)$object對象的方法對于當(dāng)前的運(yùn)行環(huán)境是不可見的,程序還能正常運(yùn)行嗎?正如這個(gè)函數(shù)名方法存在一樣,只是對我們提供的類或?qū)ο髾z查是否有我們所期望的方法,如果有,就返回TRUE,如果沒有,就返回FALSE,這里并沒有考慮可見性的問題。所以,當(dāng)你恰好判斷一個(gè)私有或者受保護(hù)的方法時(shí),你能夠得到一個(gè)正確的返回,但是執(zhí)行的時(shí)候,會得到一個(gè)“Fatal Error”錯(cuò)誤警告。
上面這段代碼的真正意圖應(yīng)該理解為:對于提供的類或者對象,我們能否在當(dāng)前的作用域中調(diào)用它的SomeMethod方法。而這正是is_callable()
函數(shù)存在的目的。is_callable()
函數(shù)接收一個(gè)回調(diào)參數(shù),可以指定一個(gè)函數(shù)名稱或者一個(gè)包含方法名和對象的數(shù)組,如果在當(dāng)前作用域中可以執(zhí)行,就返回TRUE。
<?php if (is_callable(array($object, 'SomeMethod'))) { $object->SomeMethod($this, TRUE); }?>
下面來舉個(gè)例子來說明兩者的區(qū)別
<?php class Foo { public function PublicMethod(){} private function PrivateMethod(){} public static function PublicStaticMethod(){} private static function PrivateStaticMethod(){} } $foo = new Foo(); $callbacks = array( array($foo, 'PublicMethod'), array($foo, 'PrivateMethod'), array($foo, 'PublicStaticMethod'), array($foo, 'PrivateStaticMethod'), array('Foo', 'PublicMethod'), array('Foo', 'PrivateMethod'), array('Foo', 'PublicStaticMethod'), array('Foo', 'PrivateStaticMethod'), ); foreach ($callbacks as $callback){ var_dump($callback); var_dump(method_exists($callback[0], $callback[1])); var_dump(is_callable($callback)); echo str_repeat('-', 10); echo '<br />'; }
執(zhí)行上面的腳本后,我們會清晰地看到兩個(gè)函數(shù)間的差別。
is_callable()
還有其他的用法,例如,不檢查所提供的類或方法,只檢查函數(shù)或方法的語法是否正確。像method_exists()
一樣,is_callable()
可以觸發(fā)類的自動加載。
如果一個(gè)對象存在魔術(shù)方法__call
,在進(jìn)行方法判斷時(shí)method_exists()
會返回FALSE,而is_callable()
會返回TRUE。
<?php class MethodTest { public function __call($name, $arguments){ echo 'Calling object method ' . $name . ' ' .implode(', ', $arguments); echo '<br />'; } } $obj = new MethodTest(); $obj->runtest('in object context'); var_dump(method_exists($obj,'runtest')); var_dump(is_callable(array($obj,'runtest'))); echo '<br />';
運(yùn)行結(jié)果
Calling object method runtest in object context bool(false) bool(true)
關(guān)于PHP中is_callable()與method_exists()函數(shù)的用法就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過小編可以保證其準(zhǔn)確性是絕對沒問題的。希望以上內(nèi)容可以對大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
網(wǎng)站名稱:關(guān)于PHP中is_callable()與method_exists()函數(shù)的用法
本文鏈接:http://chinadenli.net/article18/gjedgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、域名注冊、定制網(wǎng)站、網(wǎng)站排名、建站公司、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)