Discussion:
$date = new Date??();
(trop ancien pour répondre)
Michael
2007-04-11 14:52:56 UTC
Permalink
Bonjour à tous,

j'ai les classes suivantes:

abstract class DateBase
{
//...
}

final class DateFR
{
//...
}

final class DateUS
{
//...
}

je sais depuis un cookie ou depuis $_GET la langue souhaitée par le
visiteur: FR ou US

plutôt que de faire un truc du genre:

var $date;

if ($langCode == 'FR')
$date = new DateFR();
else if ($langCode == 'US')
$date = new DateUS();

j'aurai aimé faire quelque chose du genre

$date = new Date$langCode();

C'est possible ça en PHP?

Merci d'avance

Mike
thierry
2007-04-11 18:28:58 UTC
Permalink
bonjour
Post by Michael
j'aurai aimé faire quelque chose du genre
$date = new Date$langCode();
C'est possible ça en PHP?
oui

au moins comme ça:
eval("\$date = new Date$langCode();");

thierry
Gromitt
2007-04-12 21:30:12 UTC
Permalink
Post by Michael
[...]
j'aurai aimé faire quelque chose du genre
$date = new Date$langCode();
C'est possible ça en PHP?
Merci d'avance
Mike
Une solution sans doute plus propre est de passer par un systeme de
Factory :

abstract class Date
{
public static function GetNew($langCode)
{
switch ((string) $langCode)
{
case 'FR': return new DateFR();
case 'US': return new DateUS();
}

throw new Exception('...'); // peut aussi etre un "return new
DateFR();" par defaut
}
}

final class DateFR extends Date
{
// ...
}

final class DateUS extends Date
{
// ...
}

$date = Date::GetNew($langCode);

Ce qui va t'éviter de trainer des "switch" à plusieurs endroits dans
le code.

Note : je n ai pas testé ce code, il se peut qu'il y ait des typos ou
des aneries.

Continuer la lecture sur narkive:
Loading...