par
Sékiltoyai » 01 déc. 2008, 23:53
Je ne vais pas non plus te l'écrire, je peux juste te montrer une autre voie.
A savoir que j'aurais fait une organisation du style :
$operation = new mult(
new variable('prix'),
new div(
new indice(
'ichtts',
new variable('date')
),
new indice(
'ichtts',
new sous(new variable('date'), 1)
)
)
);
Et pour l'implémentation j'aurais fait une classe abstraite que j'aurais implémenté ainsi :
abstract class fonction
{
private $args = array();
public function __construct()
{
$this->args = func_get_args();
}
public function resultat()
{
$resultats = array()
foreach($args as $arg)
{
if($arg instanceof fonction)
{
$resultats[] = $arg->resultat();
}
else
{
$resultats[] = $arg;
}
}
return call_user_func_array(array($this, 'calcul'), $resultats);
}
}
Un exemple de classe :
class indice
{
public function calcul($indice, $date)
{
// On récupère l'indice $indice à la date $date
}
}
Pour stocker l'opération dans une chaine on fait :
$chaine = serialize($operation);
Pour la décoder :
$operation = deserialize($chaine);
Pour l'exécuter :
$resultat = $operation->resultat();
Il reste quelques petits problèmes, par exemple notamment je n'ai pas entièrement réglé les problèmes de perfomance d'accès à la base de données, mais si tu optes pour cette solution on peut en rediscuter…
Je ne vais pas non plus te l'écrire, je peux juste te montrer une autre voie.
A savoir que j'aurais fait une organisation du style :
[php]$operation = new mult(
new variable('prix'),
new div(
new indice(
'ichtts',
new variable('date')
),
new indice(
'ichtts',
new sous(new variable('date'), 1)
)
)
);[/php]
Et pour l'implémentation j'aurais fait une classe abstraite que j'aurais implémenté ainsi :
[php]abstract class fonction
{
private $args = array();
public function __construct()
{
$this->args = func_get_args();
}
public function resultat()
{
$resultats = array()
foreach($args as $arg)
{
if($arg instanceof fonction)
{
$resultats[] = $arg->resultat();
}
else
{
$resultats[] = $arg;
}
}
return call_user_func_array(array($this, 'calcul'), $resultats);
}
}[/php]
Un exemple de classe :
[php]class indice
{
public function calcul($indice, $date)
{
// On récupère l'indice $indice à la date $date
}
}[/php]
Pour stocker l'opération dans une chaine on fait :
[php]$chaine = serialize($operation);[/php]
Pour la décoder :
[php]$operation = deserialize($chaine);[/php]
Pour l'exécuter :
[php]$resultat = $operation->resultat();[/php]
Il reste quelques petits problèmes, par exemple notamment je n'ai pas entièrement réglé les problèmes de perfomance d'accès à la base de données, mais si tu optes pour cette solution on peut en rediscuter…