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] Déclaration dynamique de variable membre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 15
    Par défaut [POO] Déclaration dynamique de variable membre
    Bonjour à tous,

    je cherche à déclarer une nouvelle variable membre dans un objet, dynamiquement, c'est à dire en fonction de la sortie d'un script qui va vérifier si une nouvelle table n'a pas été créée et si cette nouvelle table n'est pas un nouvel attribut de cet objet.
    Ca éviterait d'avoir à rajouter du code à chaque modif de la base.

    J'ai essayé avec eval et en toute logique ça ne marche pas. Existe t'il une fonction prévue pour modifier le "schéma" d'une classe?


    Bonne journée,
    A plus,
    Frédéric

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    PHP5 ou PHP4 ?

    avec PHP5 tu as acces au methodes magiques __get et __set te permettant de gerer des variables membres de maniere transparente pour l'exterieur et de les gerer sous forme de tableau associatif a l'interieur de la classe.

    un exemple est présent dans la doc :

    http://fr2.php.net/manual/fr/languag...verloading.php

    en php4, rien ne t'empeche de "simuler" ce comportement mais les methodes d'acces aux variables ressemblerons a $obj->get('nom_variable'); et $obj->set('nom_variable', $valeur) au lieu de $obj->nom_variable et $obj->nom_variable = $valeur

  3. #3
    Invité
    Invité(e)
    Par défaut Erreur !
    Citation Envoyé par Fladnag
    PHP5 ou PHP4 ?

    avec PHP5 tu as acces au methodes magiques __get et __set te permettant de gerer des variables membres de maniere transparente pour l'exterieur et de les gerer sous forme de tableau associatif a l'interieur de la classe.

    un exemple est présent dans la doc :

    http://fr2.php.net/manual/fr/languag...verloading.php
    La surcharge objet n'est pas destinée à gérer les variables et méthodes membres de manière transaprente, sur certaines configurations PHP 5, les méthodes __get et __set ne sont appelées que lorsque la variable membre n'est pas définie dans la classe (ceci devrait être le fonctionnement normal de ces méthodes !).

    C'est une grosse aberration du langage qu'il faut cesser de répandre...!!

    Le manuel PHP est clair à ce sujet :

    Citation Envoyé par Manuel PHP
    Les appels de méthodes et l'accès aux membres peuvent être surchargés via les méthodes __call(), __get() et __set(). Ces méthodes ne seront déclenchées que si votre objet, hérité ou non, ne contient pas le membre ou la méthode auquel vous tentez d'accéder.
    Ces méthodes sont destinées à la surcharge, et à la surcharge uniquement.

    Utilisez plutôt des accesseurs pour gérer les attributs avec une visibilité limitée (protected ou private).

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    je suis bien d'accord, c'est pas fait pour, mais ca fonctionne... c'est une architecture dynamique pas tres propre, il vaudrait mieux gerer ca explicitement sous forme de tableau avec des setVar($nomVariable, $valeur), mais ca répondais a sa question...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fladnag
    je suis bien d'accord, c'est pas fait pour, mais ca fonctionne... c'est une architecture dynamique pas tres propre, il vaudrait mieux gerer ca explicitement sous forme de tableau avec des setVar($nomVariable, $valeur), mais ca répondais a sa question...
    Effectivement ça marche, mais pas systématiquement.

    La méthode __call() pour les méthodes ne peut pas être détournée de cette façon, les deux autres devraient suivre...

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    mais je me suis bien gardé de parler de __call, uniquement de __set et __get ;o)

    personnellement, j'ai *l'habitude* d'avoir une vision "Java" d'un objet, avec des getter et des setter explicites et des attributs private... donc j'utilise jamais __set et __get

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

Discussions similaires

  1. [POO] Interdire la déclaration de variable membre dynamique
    Par raoulchatigre dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2008, 15h05
  2. [POO] Définition des variables membre static
    Par AurélienB dans le forum Langage
    Réponses: 13
    Dernier message: 18/02/2008, 11h39
  3. [POO] Création dynamique de variables de classe
    Par Philoulheinz dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 15h38
  4. Réponses: 14
    Dernier message: 26/10/2006, 14h44
  5. [POO] Classe abstraite PHP5 et variables membres
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 01h27

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