2009-12-01 65 views

回答

29

您可以使用preg_grep()對其進行過濾:

$method_names = preg_grep('/^bla_/', get_class_methods($object)); 
+0

變量$ object來自哪裏? 其實我想獲取4和5控制器的方法列表。我如何設置'$ object'變量? – 2017-10-17 11:14:14

5

嘗試啓動名稱:

$methods = array(); 
foreach (get_class_methods($myObj) as $method) { 
    if (strpos($method, "bla_") === 0) { 
     $methods[] = $method; 
    } 
} 

注意===必要在這裏。 ==將不起作用,因爲如果找不到匹配項,strpos()將返回false。由於PHP動態輸入,這等於0,因此需要進行嚴格的(類型安全的)相等性檢查。

1

爲什麼不讓自己的函數從get_class_methods()中循環遍歷數組,並針對「bla_」測試每個元素並返回一個包含每個匹配值的新列表?

0

我會更靈活一些,如這表明東西(除非方法名稱是動態的或未知):

interface ITest 
{ 
    function blah_test(); 
    function blah_test2(); 
} 

class Class1 implements ITest 
{ 
    function blah_test() 
    { 
    } 

    function blah_test2() 
    { 
    } 

    function somethingelse() 
    { 
    } 
} 

$obj = new Class1(); 

$methods = array_intersect(get_class_methods($obj), get_class_methods('ITest')); 
foreach($methods as $methodName) 
{ 
    echo "$methodName\n"; 
} 

輸出:

blah_test 
blah_test2