Zwracanie przez referencję

0

Witam,
potrzebuję, żeby moja statyczna metoda zwracała referencję do statycznego atrybutu, który jest tablicą, a konkretnie elementu tablicy, który znowu jest obiektem innej klasy. Obiekt ten chcę usunąć, wywołując destruktor. Tyle wstępu, teraz trochę kodu:

<?php
class wykobot {
  static private $channels=array();

  static public function zmyslona_funckja() {
    self::$channels[] = array('name'=>'wtest', 'obj'=>new channel());
  }
  static public function &getChannelByName($name) {
    foreach (self::$channels as &$channel) {
      if ($channel['name']==$name) {
      	return $channel['obj'];
      }
    }
    return false;
  }
}

class channel {
  public function __destruct() {
    die('destruktor!');
  }
}

wykobot::zmyslona_funckja();
$ch = &wykobot::getChannelByName('wtest'); // element tablicy jest zwrócony, ale nie jako referencja
unset($ch);
die('koniec!')
?>

Niby obiekty zwracane są zawsze jako referencje, ale w wersji bez & też nie podziała, dlatego na próbę dopisałem.
Wiem też, że nie przeszadza to, że atrybut wykobot::$channels jest prywatny, ma tak działać.
Jeżeli w wykobot::getChannelByName przed returnem wstawimy unset($channel['obj']) to podziała jak trzeba, tj jedyny output jaki dostaniemy to destruktor!.

0

Nie mam ochoty wgłębiać się w problem, ale ostatnio na joggerze zauważyłem właśnie wpis dotyczący tego tematu, sprawdź: http://phpizer.pl/2011/01/13/krotochwila-z-php-referencje/. Może pomoże ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1