- Inscription
Langue : [automatic], [fr], [en], … | Allez on remonte !
Information : Inscris-toi ou connecte-toi pour pouvoir participer aux forums d'Olissea.
Liste des BBS :
[PHP] Class Usine multi-arguments ???
Page 1 / 1
JeromeJ
[Avatar de JeromeJ]
posté le 14/01/2011 à 3h13
Membre de Platine 4+
[Message déjà lu]
Encore une horreur de PHP …

Il se fait que parfois on ait besoin d'une structure particulière et qu'on ne peut pas en changer sans devoir revoir tout, ce qui dans ce cas est assez débile vu qu'à part le fait que PHP ne le gère pas, le code est entièrement bon.

J'avais besoin d'une class usine en PHP.
Bon déjà petite particularité, si on souhaite créer une instance de l'usine, on ne peut pas récupérer la classe enfant créée directement à l'instanciation de l'usine. Donc soit on utilise une méthode statique (sans passer par une instanciation) soit on passe par deux étape: 1) instanciation 2) création de la classe enfant.

Jusqu'à là c'est surmontable.

<?php
 
class A
{
static function createInstance($className)
{
return new $className();
}
}
 
class B
{
 
}
 
echo get_class(A::createInstance('B')); // B
 
?>


Le problème intervient si le construction de la class cible est une function dont on ne connait pas ses arguments à l'avance.

Exemple:

class B
{
function __construct()
{
$args = func_get_args();
// …
}
}


À ce moment là on est obligé d'utiliser call_user_func_array et la syntaxe spécialement conçue pour appeller une fonction située dans une classe.

$targetClass = call_user_func_array(array($className, '__construct'), $args);


Sauf que, FAIL, ça appelle __construct de façon statique et renvoit NULL.

Peut-être que quelqu'un pourra m'aider :) mais je pense plutôt que PHP n'est pas fait pour :/
------------------------------------------
"Olissea en force | (╯°□°)╯︵ ┻━┻ Hmm… ಠ_ಠ | Vertuous circles ☺"
Piiu
[Avatar de Piiu]
posté le 14/01/2011 à 14h42
Acharné 4+
[Message déjà lu]
Ha ok, c'est pour ça que tu gueulais comme un goret hier soir devant ton pc :noel:

[Ce membre a été banni pour ce post]

PS: Owned by JeromeJ :D
PS2: Je golri évidemment :)
PS3: GTFO ;)
------------------------------------------
"K + P"
JeromeJ
[Avatar de JeromeJ]
posté le 14/01/2011 à 16h55
Membre de Platine 4+
[Message déjà lu]
Ça y est j'ai la solution \o/

Une fois n'est pas coutume, le sdz m'a aidé x)

http://www.php.net/manual/fr/reflectionclass.newinstanceargs.php

C'est tordu <.<
Dommage que l'instanciation soit obligatoire mais je suppose qu'on peut pas y couper :/
------------------------------------------
"Olissea en force | (╯°□°)╯︵ ┻━┻ Hmm… ಠ_ಠ | Vertuous circles ☺"
Page : 1
Répondre au sujet
Réponse rapide :