Page 1 sur 1

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

Posté : 13 juin 2015, 16:35
par Frantz-odtc
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 !!

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

Posté : 16 juin 2015, 17:45
par Saian
Bonjour Frantz, ce n'est pas clair du tout. Qu'est ce qui t'empêche de faire ce que tu souhaites ?

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

Posté : 17 juin 2015, 20:47
par moogli
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.

@+