Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z wykryciem referencji pomiędzy tablicami., Fatal error: Nesting level too deep - recursive dependency
szagi3891
post
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


  1. $tab = array();
  2.  
  3. $tab['zm'] = 'val';
  4. $tab['ref'] = &$tab;
  5.  
  6. print '<pre>';
  7.  
  8. var_dump($tab);
  9. print '<hr/>';
  10.  
  11. var_dump($tab['ref'] === $tab);
  12. print '<hr/>';


Jako wynik działania tego skryptu dostajemy :

  1. array(2) {
  2. ["zm"]=>
  3. string(3) "val"
  4. ["ref"]=>
  5. &array(2) {
  6. ["zm"]=>
  7. string(3) "val"
  8. ["ref"]=>
  9. *RECURSION*
  10. }
  11. }
  12.  
  13. Fatal error: Nesting level too deep - recursive dependency? in /home/szagi3891/ftp/baselib_site/ciemnia2.notatki.info/_error/ref.php on line 14


Czy ktoś wie jak wykryć referencję ? Nie wiedząc czemu ale operator === się gubi przy próbie wykrycie referencji tablicowej.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Operator === nie służy do wykrywania referencji, tylko do porównywania typów i wartości zmiennych. Problemem w tym przypadku nie jest referencja, tylko zbyt duże zagłębienie tablicy. By porównać dwie takie tablice operator === musi je po prostu "rozwinąć" i na to nie starcza mu pamięci (i nigdy nie wystarczy), stąd błąd z komunikatem o zbyt dużej liczbie zagłębień. Zauważ, że to działa już prawidłowo:
  1. $a = 5;
  2. $b = &$a;
  3. var_dump($a === $b);


Gwoli uzupełnienia co do stwierdzenia:
Cytat
Skoro jedna z tablic jest referencją (powiązaniem) z drugą, to usunięcie elementu z jednej skutkuje usunięciem elementu z drugiej.

Referencja to nic innego, jak wskazanie w pamięci miejsca, które my rozpoznajemy po nazwie zainicjowanej wcześniej zmiennej. Usunięcie tej zmiennej to "wyczyszczenie" tego miejsca w pamięci. Usunięcie referencji skutkuje usunięciem zmiennej, ponieważ operujemy na tej samej "komórce" pamięci.
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: 26.12.2025 - 17:55