callback & exception & unset
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- pavel80
 - Člen | 9
 
Zdravim!
řeším problém při vyvolání vyjímky v zavolané callback, viz nasledujici kod:
<?php
  class A
  {
    public $callback;
    public function __construct()
    {
      echo "-- construct A\n";
    }
    public function action()
    {
      echo "-- action A\n";
      call_user_func_array($this -> callback, array());
    }
    public function __destruct()
    {
      $this -> callback = NULL;
      echo "-- destruct A\n";
    }
  }
  class B
  {
    public function __construct()
    {
      echo "-- construct B\n";
    }
    public function doAction()
    {
      echo "-- doAction B\n";
      throw new Exception('Exception'); // simulujeme chybu => exception
    }
    public function __destruct()
    {
      echo "-- destruct B\n";
    }
  }
  try {
    $b = new B();
    $a = new A();
    $a -> callback = array($b, 'doAction');
    $a -> action();
  }
  catch (Exception $e) {
    echo "-- catch exception\n";
  }
  echo "\n\n-- unset\n";
  unset($a);
  unset($b);
  echo "\n\n-- done\n";
?>
v případě že doAction() proběhne ok (zakomentovat throw new exc…) je vse ok, tj:
<?php
-- construct B
-- construct A
-- action A
-- doAction B
-- unset
-- destruct A
-- destruct B
-- done
?>
ovšem v případě vyvolání exception to vypadá takto:
<?php
-- construct B
-- construct A
-- action A
-- doAction B
-- catch exception
-- unset
-- destruct A
-- done
-- destruct B
?>
zaráží mě ten destruct až nazávěr, kdy se program ukončí. očekával bych že oba případy budou stejuné a že dojde k destrukci objektů v monentě volání unset, ale to se nestane. ptám se tedy proč? můžete mi něko poradit co stím nebo jak to řešit jinak?
díky
Pavel