par
FuZZyLine » 25 juil. 2009, 18:36
Pour que ça marche correctement de mémoire c'est
call_user_func(array($class,$method)[,$args]);
Les arguments étant optionnels et non limité en nombre la syntaxe étant : $args,$args2,$arg3.
Mais si tu veux utiliser $this tu dois initialiser une instance de ta classe donc "new" et mon
deuxième morceau de code, sinon tu fais des appels "static"
Exact, je te le confirme. Ta mémoire n'à pas de lacunes

Mais mon soucis est que justement je souhaite que la class appellée le soit de manière abstraite,
static serait plus correcte, désolé. Bref, une fois la fonction éxécutée celle-ci est considérée
comme ayant été lancée hors class d'ou le soucis de ne pouvoir faire ce que je veux.
En gros et pour faire court hormis instanciée la class ne peut fonctionner...
Bien ennuyeux ca ;(
Je laisse ouvert le sujet 1 ou 2 heures puis le clos,
Merci à toi pour la piste
EDIT:
Après quelques essais j'ai eu cette idée mais c'est hyper laid !
/**
* MyClass.php
* .
* .
*/
class MyClass extends parent ParentMyClass ...
{
.
.
.
public function dispatch()
{
/**
* Test et attribution
*/
if (!isset($this -> _urlEnvironment[url])) $url = "index";
else $url = $this -> _urlEnvironment[url];
/**
* Nom du fichier à include
*/
$fileName = $url."xxx.php";
/**
* Test puis chargement, sinon on sort
*/
if (!file_exists("./xxx/xxx/".$fileName)) exit(-1);
require_once("./xxx/xxx/".$fileName);
/**
* Nom de la class
*/
$className = ucfirst($url)."xxx";
/**
* Nom de la fonction
*/
$fct = $url."Action";
/**
* Appel de la fonction pointée par l'url...
*/
call_user_func(Array($className, $fct), Array($this));
/**
* Simple point de test
*/
print_r($this);
return true;
}
}
/**
* xxx.php extends MyClass
* .
* .
*/
class xxx extends MyClass
{
function xxxAction($obj)
{
$obj[0] -> title = "Dans la fonction : ".__FUNCTION__.", class : ".__CLASS__;
return true;
}
.
.
.
}
Ca marche parfaitement mais le HIC: c'est que c'est très très moche. L'idée est bien la mais
être obligé d'envoyer l'objet en argument je trouve ca stupide...
Tampis, une idée, en dormant, me viendra peut-être lol Au cas ou je garde encore ouvert ce topic
jusqu'à demain.
Bon code à tous @+
EDIT: (avant de clore)
Après avoir bien cherché, essayé divers possibilitées : Impossible de faire ce que je veux
sans passer par eval(), domage... Et comme il est hors de question d'utiliser "une bouffeuse de ressources" la solution qui se raproche le plus du résultat espéré est l'accès via Instance utilisant en extends une class de type abstract. Voili, Voilou...
Merci pour l'aide en tout cas, bon code à tous, @+
