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
luck
post
Post #2





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Nie jestem pewny, ale w PHP chyba będzie trzeba wykrywać taką referencję już na etapie wstawiania elementów do tablicy i łapać ew. wyjątek. Najprościej chyba byłoby w ten sposób:
  1. function addElement($key, $val, &$target) {
  2. if($val === $target)
  3. throw(new Exception('Self-reference detected!'));
  4.  
  5. $target[$key] = $val;
  6.  
  7. return $target;
  8. }
  9.  
  10. $tab = array();
  11.  
  12. addElement('zm', 'val', $tab);
  13. addElement('ref', $tab, $tab);

Oczywiście dobrze byłoby ubrać to w jakąś klasę, choć i tak nie wiem, czy taki sposób Cię urządza. Niestety nic lepszego nie przychodzi mi do głowy.
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: 25.12.2025 - 20:28