Peut-on choisir son interface à l'intérieur d'une méthode de classe

Petit nouveau ! | 2 Messages

13 juin 2015, 16:35

Bonjour à tous,

J'ai un problème que je ne parviens pas à résoudre seul en parcourant les différents tutos.
Voici les détails :

J'ai une classe page (avec constructeur)
Cette classe "page" est appelé via un framework maison, une méthode nommée "initialisation" est automatiquement
lancée lors de la première instanciation de classe.

Au sein du constructeur on définit si l'objet page appartient à l'utilisateur qui visite la page ou non.
Ensuite, lors de l'execution de la fonction d'initialisation, je souhaiterais faire ceci :

Code : Tout sélectionner

function initialisation() { if($this->proprietaire == "false") { /*IMPLEMENT INTERFACE PAGE_READ*/ } else if($this->proprietaire == "true") { /*IMPLEMENT INTERFACE PAGE_WRITE*/ } }
Pour résumer : au lieu d'implémenter 2 interfaces lors de la construction de la classe, je souhaiterais pouvoir le faire après en passant pas une fonction. Si ce n'est pas possible techniquement, je souhaiterais pouvoir dire à la classe d'utiliser tel ou tel interface en fonction du type d'utilisateur connecté.

Merci de votre aide !!

Avatar du membre
Mammouth du PHP | 1609 Messages

16 juin 2015, 17:45

Bonjour Frantz, ce n'est pas clair du tout. Qu'est ce qui t'empêche de faire ce que tu souhaites ?
Développeur web depuis + de 20 ans

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 juin 2015, 20:47

salut,

le principe d'interface c'est d'avoir plusieurs implémentations qui vont être appelées indifféremment l'une de l'autre.
en clair il te faudrait
- une interface qui décrit les méthodes plublic qui seront utile à ton objet
- un objet "readOnly" qui implémente l'interface
- un objet "writer" qui implémente l'interface

du coup on pourrait avoir
<?php
interface PageAction {
actionA();
actionB();
// etc.
}
class PageWriter implements PageAction{
// etc
}
class PageReader implements PageAction{
// etc
}

// a partir de la
function initialisation()
   {
      if($this->proprietaire == "false")
      {
         $this->pageAction = new PageReader();
      }
      else if($this->proprietaire == "true")
      {
        $this->pageAction = new PageWriter();
      }
      
   }
?>
Bon la cela ne semble pas vraiment être la meilleur solution, vu que pour moi, soit l'utilisateur peux modifier la page ou pas.
et vu comme ça c'est plutôt une gestion de droit qu'il te faut (ACL ?) sur chaque page.
du coup tu pourrais quand même avoir un objet pour la lecture et un pour l'écriture mais qui ne serait utiliser que si le besoin est la.

@+
Il en faut peu pour être heureux ......