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] Comportement statique d'un objet


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut [POO] Comportement statique d'un objet
    Bonsoir à tous.

    Ça fait un moment que je fraye dans les eaux nébuleuses des bizarreries de l'implémentation de l'OOP en PHP 5.3.x mais je suis tombé à la renverse récemment en voyant ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class a { public function sayHello () { echo "hello"; } }
    a::sayHello(); // Affiche hello
    Je n'étais jamais tombé dessus par avant (et pour cause, je pensait ça tout bonnement impossible.) A moins que je ne me trompe, un tel méfait est inconcevable en Java ou d'autres langages objet (quelqu'un peut-il confirmer ?)

    Du coup mon idée d'utiliser le __callStatic pour résoudre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonSingleton::maMethodeObjet();
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonSingleton::instance()->maMethodeObjet()
    tombe à l'eau. C'est dommage, ça aurait été bien pratique...

    Vous avez des idées sur ce point ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    y'a rien de choquant mais t'as un belle erreur :
    Strict Standards: Non-static method a::sayHello() should not be called statically
    y'aura aussi des soucis pour $this/self

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    J'ai remarqué oui. C'est assez impressionnant ce manque de sécurité dans le langage.
    Je me demande si c'est possible également en 5.1 ou si c'est un side effect de l'implémentation du late static binding...

  4. #4
    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,

    Autre bizzarerie du PHP 5.3.x : la résolution de constantes à la volée, oui oui et pas de fonctions statiques :
    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
    <?php 
     
    class mere {
       static function uidcp() {
          return static::UIDCP;
       }
    }
     
    class fille extends mere {
       const UIDCP = 'fille123';
    }
     
    $a = fille::uidcp(); //$a = 'fille123'
     
    ?>

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    y'a rien de choquant non plus c'est le late static binding ca

  6. #6
    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
    Oui je suis bien d'accord, juste que la doc de PHP n'en fait pas mention du LSB sur les constantes.

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

Discussions similaires

  1. [POO] Calendrier et passage d' objet en parametre
    Par julienr dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/11/2007, 22h18
  2. [POO] PHP et l'Orienté Objet
    Par kagura dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2006, 18h01
  3. Aide sur POO :: Classe et liste d'objet
    Par Andry dans le forum Langage
    Réponses: 1
    Dernier message: 23/01/2006, 15h51
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [POO] projet ->soutirer les classes objets
    Par .:dev:. dans le forum C++
    Réponses: 10
    Dernier message: 14/06/2005, 23h05

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