Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2011, 12h53   #1
Membre à l'essai
 
Inscription : janvier 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 67
Points : 21
Points : 21
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 :

Citation:
Fatal error: Method MaClasse::__callstatic() must take exactly 2 arguments
En effet, elle reçoit 3 arguments.
Voici la méthode en question :
Code :
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.
Manu0086 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 13h59   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
c'est

Code :
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.");
    }
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 14h31   #3
Membre à l'essai
 
Inscription : janvier 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 67
Points : 21
Points : 21
Merci, ça passe

Mais je dois maintenant modifier tous les appels à cette fonction... c'est parti...
Manu0086 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 14h45   #4
Membre à l'essai
 
Inscription : janvier 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 67
Points : 21
Points : 21
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 :
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.
Manu0086 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 16h04   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 17h09   #6
Membre à l'essai
 
Inscription : janvier 2003
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 67
Points : 21
Points : 21
J'ai trouvé la solution la plus simple... j'ai renommé la fonction
Manu0086 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h34.


 
 
 
 
Partenaires

Hébergement Web