is_calleable、function_exits與method_exits函數用法

bool is_callable ( mixed $var [, bool $syntax_only [, string $callable_name ]] )

is_calleable是測參數是否爲合法的可調用結構
第一個參數可以是函數名,可以是類或對象和方法數組。
第二個參數是否對方法名只做語法檢查,不判斷是否可以調用,默認false
第三個參數是將調用的名稱傳人一個變量中,感覺不咋常用

//判斷方法是否能調用
function test(){};
$a = function(){};
$b = "test";
var_dump(is_callable("test")); //true
var_dump(is_callable($a)); //true
var_dump(is_callable($b)); //true
var_dump(is_callable("mock")); //false  一個不存在的函數
var_dump(is_callable("mock", true)); //true 只檢查函數的語法

class TestClass
{
    public function testMethod(){}
    protected function protectedMethod(){} 
    private function privateMethod(){} 
}
$obj = new TestClass(null);
var_dump(is_callable(array("TestClass", 'testMethod')));//true 類方法
var_dump(is_callable(array($obj, 'testMethod')));//true 對象方法
var_dump(is_callable(array("TestClass", 'testMethod2')));//false 不存在的類方法
var_dump(is_callable(array("TestClass", 'testMethod2'), true));//true
var_dump(is_callable(array("TestClass", 'protectedMethod')));//false 受保護的類方法
var_dump(is_callable(array("TestClass", 'protectedMethod'), true));//true 只檢查語法 
var_dump(is_callable(array("TestClass", 'privateMethod')));//false 私有類方法
var_dump(is_callable(array("TestClass", 'privateMethod'), true));//true
var_dump(is_callable(array($obj, 'privateMethod'), false, $name));//true 
echo $name;//TestClass::privateMethod

function_exists (string$function_name )
從參數可以看出傳人的是一個函數的名字,不能傳類或者對象方法。

bool method_exists ( object $object , string $method_name )
判斷類或者對象方法是否存在,手冊上object得類型提示有些不準確,傳類的名字作爲參數其實也行。

class TestClass
{
    public function testMethod(){}
    protected function protectedMethod(){} 
    private function privateMethod(){} 
}
$obj = new TestClass(null);
var_dump(method_exists($obj, "testMethod"));//true 類方法
var_dump(method_exists("TestClass", "testMethod"));//true 類方法
var_dump(method_exists("TestClass", "protectedMethod"));//true受保護類方法
var_dump(method_exists("TestClass", "privateMethod"));//true私有類方法
is_callable和method_exits在判斷類方法時有一個區別,默認下is_callable函數要判斷該方法能不能被正常調用,想protected和private方法返回的都是false,而method_exits就如它的名字所示,只是判斷該方法是否存在,而不管能不能調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章