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] Méthode __callStatic PHP 5.3


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut [POO] Méthode __callStatic PHP 5.3
    Bonjour,

    Je suis vraiment débutant en POO et je rencontre un problème sur la méthode __callStatic pour la version PHP 5.3.
    J'ai acquis un site il y a quelques temps, il fonctionne très bien en PHP 5.2.

    M'apprêtant à changer de serveur, j'ai installé PHP 5.3 mais je rencontre des problèmes.

    Une fonction __callStatic avait été développée pour prévoir un changement de version PHP.
    Le problème, c'est qu'elle semble être mal développée et génère l'erreur suivante :

    Fatal error: Method MaClasse::__callstatic() must take exactly 2 arguments
    En effet, elle reçoit 3 arguments.
    Voici la méthode en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static function __callStatic($className, $name, $arguments) {
    		if(method_exists($className, $name) && is_callable(array($className, $name))) {
    			return call_user_func_array(array($className, $name), $arguments);
    		} else {
    			throw new BadMethodCallException("La méthode \"$name\" n'existe pas ou n'est pas appelable depuis ce contexte.");
    		}
    	}
    Tous les appels à cette méthode sont donc soumis avec 3 paramètres...

    Comment faire pour la rendre fonctionnelle et récupérer $className dans la méthode ? (toutes les classes sont abstraites)

    Merci.

  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
    c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static function __callStatic($name, $arguments) {
        if(is_callable(array(self, $name))) {
            return call_user_func_array(array(self, $name), $arguments);
        } else {
            throw new BadMethodCallException("La méthode \"$name\" n'existe pas ou n'est pas appelable depuis ce contexte.");
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut
    Merci, ça passe

    Mais je dois maintenant modifier tous les appels à cette fonction... c'est parti...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut
    Problème déplacé...

    Je ne vois pas comment modifier les appels à cette méthode (normal, je ne comprends rien à tout ça ^^)

    Voici une autre méthode dans une classe héritant de la précédente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static function spawn($className, $decoratedClassName, $id) {
    		$decorated = self::__callStatic($decoratedClassName, "spawn", array($id));
    		....
    }
    Si j'élimine un des deux premiers arguments, plus rien ne fonctionne, et j'ai droit à une jolie erreur 324 ERR_EMPTY_RESPONSE.

  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
    t'as pas appelé __callstatic comme ça, callstatic est automatiquement appelé lorsque que la méthode n'existe pas, donc ca ne correspond pas dutout au callstatic de PHP 5.3, c'est juste un call_user_func

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut
    J'ai trouvé la solution la plus simple... j'ai renommé la fonction

Discussions similaires

  1. [POO] Utilisation de PHP Orienté Objet
    Par Gibou dans le forum Langage
    Réponses: 7
    Dernier message: 26/11/2006, 03h30
  2. [POO] héritage en php
    Par zana74 dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2006, 10h50
  3. [POO] Site en PHP 5
    Par emstar dans le forum Langage
    Réponses: 8
    Dernier message: 11/04/2006, 15h36
  4. [POO] bug? de php
    Par XtofRoland dans le forum Langage
    Réponses: 11
    Dernier message: 21/02/2006, 15h54
  5. [POO] Question class php=>javascript
    Par jeff_! dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 16h10

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