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!
.