Re: php et exceptions

Page principale

Répondre à ce message
Auteur: Anael
Date:  
À: guilde
Sujet: Re: php et exceptions
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