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
 
Start new topic
Odpowiedzi
varez
post
Post #2





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

Ostrzeżenie: (0%)
-----


to jak to zrobic zeby bylo dobrze?
removeChannel mnie nie ratuje, bo ja potrzebuje tego obiektu właśnie, bo będzie na nim sporo operacji, unset był tylko dla testu, że posiadam faktycznie obiekt pod tą zmienną, a nie jakąś jego kopię czy coś.
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: 13.10.2025 - 12:31