2010-06-05 21 views
6

Esiste un modo per verificare se un metodo di classe è stato dichiarato come privato o pubblico?Verifica della visibilità del metodo in PHP

Sto lavorando su un controller in cui l'url è mappato ai metodi della classe e voglio solo attivare i metodi se sono definiti come pubblici.

risposta

7

Per estendere la risposta Safraz Ahmed s'(dal Reflection manca la documentazione) questo è un esempio veloce:

class foo { 
    private function bar() { 
     echo "bar"; 
    } 
} 

$check = new ReflectionMethod('foo', 'bar'); 

echo $check->isPrivate(); 
+0

Questa è una buona aggiunta, +1 :) – Sarfraz

2

consente di guardare dal lato opposto. Non hai davvero bisogno di conoscere il livello di visibilità del metodo. Devi sapere se puoi chiamare il metodo. http://lv.php.net/is_callable

if(is_callable(array($controller, $method))){ 
    return $controller->$method(); 
}else{ 
    throw new Exception('Method is not callable'); 
    return false; 
} 
+0

Questa è la soluzione più naturale ancora fornita. – erisco

+2

si, ottimo suggerimento. Il problema è che tutti i metodi sono all'interno della classe corrente, quindi saranno tutti chiamabili, privati ​​o pubblici, quindi in questo modo creerò la mia visibilità qui solo consentendo di eseguire metodi pubblici dall'URL. Ma una parte della storia è anche che ho scoperto che '__destruct' e che deve essere pubblico, ed è stato quindi richiamabile dall'URL, quindi ora sono andato per una combo con un prefisso di metodo (action_). – phobia

Problemi correlati