Le 12/02/2013 10:27, Frédéric a écrit :
> Bonjour,
>
> Quelqu'un pourrait-il me dire pourquoi ce code ne marche pas :
>
> $toto = [];
> ...
> $titi = "test";
> $delta = $time2->diff($time1);
> try {
> $toto[$titi]->add($delta); <<<<<<<<<< ligne 50
> } catch (Exception $e) {
> $toto[$titi] = new DateTime($delta);
> }
>
> J'obtiens :
>
> PHP Notice: Undefined index: 2012-12-11 on line 50
> PHP Fatal error: Call to a member function add() on a non-object on line 50
>
> Si j'utilise date_add() à la place, ça ne me sort qu'un notice et un
> warning, mais du coup, ça ne fait pas ce que je veux (pas d'exception
> levée).
>
> C'est juste pour faire joli, les exceptions, en php ???!!!???
>
Hello,
J'ai l'impression que tu mélanges quelques concepts de POO ;-)
Je pars du principe que le ->add() en question correspond bien à
Datetime::add (
http://php.net/manual/fr/datetime.add.php).
Tu peux utiliser des méthodes sur des objets.
$toto[$titi] ne contient pas d'objet, comme te l'indique l'erreur fatale.
Si tu remontes d'un cran, tu vois que tu cherches l'indice '2012-12-11'
dans ton tableau $toto ... et qu'il n'existe pas (undefined index)
==> Ca crashe => exception
Pour répondre à ta question : tu dois créer un objet de type dateTime
dans ton array à l'indice voulu.
Une fois que ton array sera "porteuse" de cet objet, tu pourras alors
"appliquer" des méthodes à cet objet.
Pour rester dans l'ioptique de la POO, je te conseille de passer à un
ArrayObject au lieu de rester sur des array. Ca t'éviteras également ce
genre de galères.
Bon app',
Anael