2014-09-20 2 views
-3

Je dois vérifier l'accessibilité de l'utilisateur à une méthode.comment appeler une méthode avant d'autres méthodes

Lorsqu'une méthode appelle le script, je dois vérifier si l'utilisateur a accès à cette méthode ou non. et sinon, la méthode devrait return false.

J'ai fait une méthode nommée _access() qui vérifie l'accessibilité. Comment puis-je appeler cette méthode avant toute autre méthode.?

Je ne peux pas appeler _access() dans toutes les méthodes par moi-même.

obj:

class foo{ 
    function a() 
     $this->_access(); //I dont want to do this for every functions... 
    } 
    function b() 
     //b() should stop if _access() == false 
    } 
    function _access() 
     //return true or false; 
     //this method can backtrace and check user accessibility to caller method. 
    } 
} 

merci à l'avance.

+0

hvnt avez-vous entendu parler des déclarations if? –

Répondre

3

Vous pouvez utiliser des méthodes magiques dans PHP 5.0+ qui vous permettraient de cacher des méthodes et d'exécuter un script avant.

Read about magic methods

class foo{ 
    public function __call (string $name , array $arguments) 
    { 
     if($this->_access) 
      $name($arguments); 
     else 
      echo "User does not have access"; 
    } 

    private function a(){} 
    private function b(){} 
    private function _access() 
     //return true or false; 
    } 
} 

Modifier


Vous pouvez mettre en œuvre ce assez facilement dans toutes vos classes en faisant une classe de base et extension.

class BaseMethodAccess{ 
    public function __call (string $name , array $arguments) 
    { 
     if($this->_access) 
      $name($arguments); 
     else 
      echo "User does not have access"; 
    } 

    private function _access() 
     //return true or false; 
    } 
} 

class Foo extends BaseMethodAccess{ 
    private function getName(){} 
} 

Vous pouvez également implémenter la méthode __get pour modifier l'accès aux propriétés.

+0

c'est une bonne idée ... mais mon site a cent méthodes. pas assez bon dans mon site. merci ... – Pooya

+0

Je change d'avis. comment déclencher __call() sur les fonctions publiques? – Pooya

+0

Vous ne pouvez pas déclencher sur des fonctions publiques. La fonction doit être inaccessible avant que la méthode magique ne soit invoquée, ce qui signifie que la méthode doit être privée, ou qu'elle ne doit pas exister sous le nom appelé. – BayssMekanique

Questions connexes