Page 1 sur 1

Lancer une classe d'après une variable

Posté : 25 sept. 2006, 21:30
par momox
Bonsoir,
dans mes brainstormings d'après lycée, j'ai eu une folle idée pour mon projet.
Après moultes mals de tête, j'ai imaginé un système de modules assez bien plaisant et qui satisferait pas mal de monde et j'en suis venu a une question.
Est il possible de lancer une classe d'après un nom de variable, par exemple en faisant
$mynewclass = new $myclass;
?
Cela me parait un peu farfelu mais si quelqu'un avait un élement de réponse a m'avancer, car la seule structure que j'ai trouvée n'est pas très plaisante a mon gout.
Merci d'avance ;)
PS: a force de penser, va falloir que je prene des actions chez upsa...

Posté : 25 sept. 2006, 21:48
par Truc
eval() :-k
après vérification des variables... pour que rien d'autre qui ne doit être exécuté ne l'est.

Posté : 25 sept. 2006, 21:58
par momox
Merci Truc, je ne pensais pas qu'elle servait a ca cette fonction :P
@+

Posté : 25 sept. 2006, 22:04
par jeff
salut
si $myclass est une chaine
ceux-ci ne pose pas de problem
$mynewclass = new $myclass(); 

Posté : 25 sept. 2006, 22:25
par momox
Donc si $myclass est égal a application, ca va me faire $mynewlcass = new application(); ?
@+

Posté : 25 sept. 2006, 22:50
par Truc
Le meilleur moyen de le savoir est de....................... tester :D

Posté : 26 sept. 2006, 07:26
par momox
Ce que je m'empresserais de faire ce midi a ma pause repas ou avant de partir au lycée :D
@+

Posté : 26 sept. 2006, 23:26
par zigz4g
En PHP5 j'avais deja essayer de faire ce systeme.
Il marche, normallement tu peux remplacer le nom de la classe pas une variable.
Voici un tres vieux bout de code de test.
<?php
class Test
{
    public function TestOne()
    {
        echo 'Je suis TestOne<br />';
    }
}

class TestStatic
{
    public static function TestStaticTwo()
    {
        echo 'Je suis TestStaticTwo<br />';
    }
}

$oneclass = 'Test';
$onemethod = 'TestOne';

$object = new $oneclass();
$object->$onemethod();

$static = 'TestStatic';
$static_method = 'TestStaticTwo';

//$static::TestStaticTwo();//KO
//$static::$static_method();//KO
eval("\$static::TestStaticTwo();");//KO mais ne plante pas
?>
Je ne me rappel plus pourquoi j'avais oublier se systeme. Je crois que c'est a cause des static
qui ne marchent pas. Vue que j'utilise les static dans mon code.
Faudrais tester plus de cas pour voir toutes les limitations.