Page 1 sur 1
[RESOLU] Erreur Php
Posté : 11 sept. 2010, 02:43
par devlop78
Bonjour,
Voici une ligne qui fonctionne parfaitement chez moi (en local):
$plug = $separators[0]::getInstance(); //$separators[0] contient le nom d'une classe
Sur mon hébergement, j'ai une erreur
Parse Error unexpected t_paamayim_nekudotayim sur cette ligne qui bloque tout mon site.
J'ai donc cherché à appeler la méthode autrement, par :
$plug = forward_static_call(array($separators[0], 'getInstance'));
Cette ligne ne bloque plus le site, mais dans la page qui appelle le "module" (plug) :
Fatal error: Call to undefined function forward_static_call()
AhAh ... cette fonction n'existe que depuis php 5.3 ...
Bref ... quelqu'un a-t-il une solution pour appeler cette méthode statique de façon "dynamique" (en attendant, je n'ai qu'un plug, je peux donc mettre directement son nom, mais bon ...)
Merci
Re: Erreur Php
Posté : 11 sept. 2010, 10:13
par Ganesh
Bonjour,
Comme l'indique l'erreur, ton problème vient de paamayim_nekudotayim, autrement dit l'opérateur de portée (::). L'explication de ton problème se trouve dans ton poste, la fonction forward_static_call() n'est pas définie parce que tu as une version inférieure à la 5.3. Or le référencement d'une classe en utilisant une variable n'est lui aussi possible qu'à partir de la version 5.3.
La solution, un peu lourde certes, est de passer par un switch... ou de migrer vers PHP5.3 si c'est possible.
Re: Erreur Php
Posté : 11 sept. 2010, 20:39
par devlop78
Donc, si je comprends bien, ce n'est pas "automatique". Car à l'époque du procédural (petit lol), $$mavar et $mafonction() fonctionnait très bien ... j'en ai donc conclu que cela fonctionnait donc toutes les circonstances (et chez moi ça marchait !). Donc, c'est un problème d'implémentation ...
Passer à php5.3 non pas possible, c'est un hébergeur mutualisé. Ce qui est dommage car je crois que le "bon" garbage collector n'est présent que depuis php5.3.
Ce qui est asssez drôle, c'est que :
if (class_exists($separators[0],false)) {
if (method_exists($separators[0],'getInstance')) {
if (method_exists($plug,$separators[1])){
$plug->$methode($decoupage);
fonctionnent ...
On serait donc dans un problème purement lié au static ??
Ca me fait penser ... pour palier au problèmen je pourrais directement faire un new $separators[0] (sans Singleton), en vérifiant au préalable dans la classe qui possède son instance qu'il n'existe pas. Mais là ... j'avais même pas à m'en préoccuper ..
Re: Erreur Php
Posté : 11 sept. 2010, 20:41
par devlop78
De toutes façons, c'est pas si mal, étant donné que tout ce code est actuellement coté Vue. Ca devrait être au Controlleur de s'occuper du chargement de la classe. C'est donc à revoir !
Re: Erreur Php
Posté : 11 sept. 2010, 20:44
par stealth35
et comme ca :
$plug = call_user_func($separators[0] . '::getInstance');
Re: Erreur Php
Posté : 11 sept. 2010, 20:49
par devlop78
J'ai failli te dire que j'en doutais mais :
http://php.net/manual/fr/function.call-user-func.php
$classname = "maclasse";
call_user_func(array($classname, 'dit_bonjour'));
call_user_func($classname .'::dit_bonjour'); // Depuis 5.2.3
Ca m'arrangerait effectivement car je suis un amoureux du Singleton ... Ce qui est dommage (oui et non) car j'en suis tellement satisfait que je n'ai jamais essayé les autres Desing Patterns. Mais j'ai un code si fluide, des classes qui communiquent si bien entre elles ... c'est vraiment une superbe invention

(j'ai pas trouvé le smiley Love ...)
Re: Erreur Php
Posté : 11 sept. 2010, 20:52
par stealth35
donc c'est ok ?
Re: Erreur Php
Posté : 11 sept. 2010, 20:57
par devlop78
Si j'ai bien compris la première réponse, j'ai trouvé l'origine du problème (fonctionnalité non implémentée dans la version 5.2).
J'essayerai ta fonction magique ^^. C'est un peu le bazarre n'empêche toutes ces fonctions d'appel de fonction (de callback comme on dirait en JS ou AS3).
Pour le moment je n'ai pas le temps de voir et je voulais surtout savoir pourquoi, car je n'aime pas avoir la sensation d'un "beug". Je suis trop habitué par Windows et j'attends mieux de Linux, Apache et PhP ^^
Je tiens au courant !
Re: [RESOLU] Erreur Php
Posté : 11 sept. 2010, 21:03
par stealth35
y'a pas de bug, c'est l'une des formes du type
callback
Re: [RESOLU] Erreur Php
Posté : 12 sept. 2010, 00:16
par devlop78
Je parlais d'un éventuel beug sur $$mavar::methode() pas sur les callback. Mais pas de beug comme montré précedemment.
Re: [RESOLU] Erreur Php
Posté : 12 sept. 2010, 01:31
par devlop78
La fonction fonctionne Nickel sur le serveur de prod mais fait planter Apache chez moi !! Cela dit, ce n'est pas le premier à me le faire planter ... C'est qu'il est sensible !!
Re: [RESOLU] Erreur Php
Posté : 12 sept. 2010, 05:34
par stealth35
La fonction fonctionne Nickel sur le serveur de prod mais fait planter Apache chez moi !! Cela dit, ce n'est pas le premier à me le faire planter ... C'est qu'il est sensible !!
bizarre le plus souvent quand apache plante c'est un problème de mémoire au niveau de php