IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Interface pour une variable [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut [POO] Interface pour une variable
    Bonjour,

    Je travaille sur un projet sur lequel j'utilise les interfaces PHP (par un GUI, ça : http://php.net/manual/fr/language.oop5.interfaces.php ).

    Cela me permet de rendre obligatoire les méthodes indispensables au fonctionnement du script quand on développe les classes qui en découlent.

    Je voudrais faire la même chose pour une variable (tableau ou objet peut importe, je m'adapterai).
    Par exemple, il faudrait que je définisse un tableau du type :

    $voiture['moteur'] = XXXX (obligatoire)
    $voiture['pannes'] = YYYY (facultatif)

    Et que PHP lève une exception si la structure n'est pas respectée.

    Il me semble que PHP ne permet pas de faire cela.
    Avez vous une solution ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    il est impossible de contrôler la structure d'une variable de la même façon que le font les interfaces avec une classe.
    Par contre tu peux très bien valider toi-même la structure de ta variable ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $data    = array('moteur' => 'XXX', 'pannes' => 'YYY', 'essais' => 'ZZZ');
    $keys    = array('moteur', 'type');
    $isValid = (count(array_intersect($keys, array_keys($data))) === count($keys));
     
    ?>

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut
    Merci pour l'astuce

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu ne peux effectivement pas ajouter de variable membre dans une interface.
    Par contre plutôt qu'utiliser un tableau tu peux forcer l'utilisation d'un type perso (une classe) qui dérivera d'une classe qui implémente déjà toute la bonne structure.

    Ca permet d'avoir un type propre , bien structuré mais qui laisse la place à une évolution grâce à l'héritage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class carType
    {
    	protected $moteur;
    	protected $pannes = array();
    }
     
    public class myType extends carType
    {
    	public function setMoteur()
    	{
    	}
     
    	public function getPanne()
    	{
    	}
    }
     
    interface UneInterface
    {
    	public function mandatory(myType $attribut);
    }
    Avec ça toute les classe implémentant "Uneinterface" aurons une méthode mandatory avec un attribut carType
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] serialize pour une connexion
    Par lafracas dans le forum Langage
    Réponses: 5
    Dernier message: 24/05/2006, 14h28
  2. [POO] Problème avec une variable static
    Par grimsk dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2006, 01h58
  3. [POO] Contenu d'une variable nom d'un objet
    Par reventlov dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/05/2006, 17h04
  4. Réponses: 3
    Dernier message: 12/10/2005, 09h23
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo