Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zwracanie przez referencję
varez
post
Post #1





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 17.06.2007

Ostrzeżenie: (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:

  1. <?php
  2. class wykobot {
  3. static private $channels=array();
  4.  
  5. static public function zmyslona_funckja() {
  6. self::$channels[] = array('name'=>'wtest', 'obj'=>new channel());
  7. }
  8. static public function &getChannelByName($name) {
  9. foreach (self::$channels as &$channel) {
  10. if ($channel['name']==$name) {
  11. return $channel['obj'];
  12. }
  13. }
  14. return false;
  15. }
  16. }
  17.  
  18. class channel {
  19. public function __destruct() {
  20. die('destruktor!');
  21. }
  22. }
  23.  
  24. wykobot::zmyslona_funckja();
  25. $ch = &wykobot::getChannelByName('wtest'); // element tablicy jest zwrócony, ale nie jako referencja
  26. unset($ch);
  27. die('koniec!')
  28. ?>


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

Ten post edytował varez 9.01.2011, 10:51:11
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 16:54