2009-12-01 9 views

risposta

29

È possibile utilizzare preg_grep() filtrarli:

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

Da dove viene la variabile '$ oggetto'? In realtà voglio recuperare la lista dei metodi dei 4 e 5 controllori. Come posso impostare la variabile '$ object'? –

5

Prova:

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

noti che === è necessaria qui. == non funziona, poiché strpos() restituisce false se non è stata trovata alcuna corrispondenza. A causa della digitazione dinamica di PHP, questo è uguale a 0 e pertanto è necessario un rigoroso controllo di uguaglianza (sicuro di tipo).

1

Perché non basta creare la propria funzione che scorre attraverso l'array da get_class_methods() e testa ogni elemento con "bla_" e restituisce una nuova lista con ogni valore corrispondente?

0

Vorrei suggerire qualcosa di un po 'più flessibile di questo tipo (a meno che i nomi dei metodi sono dinamici o sono sconosciuti):

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"; 
} 

Uscite :

blah_test 
blah_test2 
Problemi correlati