- Register
Lang: [automatic], [fr], [en], … | Go to the top!
Information: Register ot log in to be able to participate to Olissea forums.
BBS List:
[PHP] Class Usine multi-arguments ???
Page 1 / 1
JeromeJ
[Avatar de JeromeJ]
posted on
01-14-2011 at 3:13 am
Légende vivante
[Answer already read]
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]
posted on
01-14-2011 at 2:42 pm
Acharné 4+
[Answer already read]
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]
posted on
01-14-2011 at 4:55 pm
Légende vivante
[Answer already read]
Ç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
Answer this topic
Quick answer: