Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z referencją
Forum PHP.pl > Forum > Przedszkole
Jarod
Nie wiem czy to ma znaczenie ale używam php 5.2.0. W php referencje pozwalają na stworzenie dwóch zmiennych odwołujących się do tej samej zmiennej. Podczas przeglądania tablicy funkcją foreach(), potrzebowałem nadpisywać/kasować pewne dane. Były dwa wyjścia:
1. najpierw przelecieć przez całą tablicę i do nowej tablicy przerzucić tylko te dane, które mnie interesują
2. usuwać/nadpisywać dane podczas przeglądania

Działanie poniższego kodu jest dla mnie niezrozumiałe. Czy może mi ktoś to wyjaśnić?

  1. <?php
  2. $tablica = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11');
  3. //$tablicaRef = &$tablica;
  4. foreach($tablica As $key => $element)
  5. {
  6. $tablica[1] = 'WARTOŚĆ NADPISANA';
  7. echo $key . ' => ' . $element . '<br />';
  8. }
  9. echo '<br />--------------<br />';
  10. foreach($tablica As $key => $element)
  11. {
  12. $tablica[1] = 'WARTOŚĆ NADPISANA';
  13. echo $key . ' => ' . $element . '<br />';
  14. }
  15. ?>

Dopiero przy drugim przeglądaniu tablicy znajduje się wartość nadpisana. Jeśli odkomentuję drugą linijkę to w obydwóch przebiegach pętli znajdzie się wartość nadpisana.. Pomimo tego, że stworzyłem referencję a i tak korzystam z $tablica.. blinksmiley.gif
nospor
http://www.php.net/manual/pl/language.references.whatdo.php
Cytat
Więc poniższy skrypt:
<?php
$a =& $b
?>
znaczy tyle, że $a oraz $b wskazują na tą samą zmienną.

Notatka: $a oraz $b są całkowicie równe, czyli nie $a wskazuje na $b lub odwrotnie, lecz $a oraz $b wskazują na to samo miejsce.

To pogróbione zdanie zdaje się wyjasniac zachowanie co tu pokazujesz.

Nie robiąc referencji, $tablica zawiera tablicę.
Robiąc jednak referencję, $tablica oraz $tablicaRef nie zawieraja tablicy jako takiej, ale wskazują na miejsce, wktórym ta tablica się znajduje. Dlatego też przy referencji, zmiany widoczne są od razu
Jarod
Cytat(nospor @ 28.08.2007, 06:27:39 ) *
Robiąc jednak referencję, $tablica oraz $tablicaRef nie zawieraja tablicy jako takiej, ale wskazują na miejsce, wktórym ta tablica się znajduje. Dlatego też przy referencji, zmiany widoczne są od razu

Co z tego, że stworzyłem referencję, jeśli z niej nie korzystam?
nospor
chodzi oto, ze tworząc referencje nawet dla innej zmiennej, to pierwsza zmienna tez juz nie zawiera tego co zawierala, a zawiera tez juz referencje do miejsca gdzie leza dane. To by wyjasnialo zachowanie twojego kodu.
Jarod
Cytat(nospor @ 29.08.2007, 05:10:01 ) *
chodzi oto, ze tworząc referencje nawet dla innej zmiennej, to pierwsza zmienna tez juz nie zawiera tego co zawierala, a zawiera tez juz referencje do miejsca gdzie leza dane. To by wyjasnialo zachowanie twojego kodu.


Jeżeli masz zmienn± $tablica, która zawiera tablicę, to zapis
  1. <?php
  2. $tablicaRef = &$tablica;
  3. ?>

powoduje, że zmienna $tablicaRef wskazuje na miejsce w pamięci, gdzie znajduje się $tablica. To jest jasne. Ale dlaczego przy okazji zmienna $tablica też staje się referencją?
nospor
Cytat
powoduje, że zmienna $tablicaRef wskazuje na miejsce w pamięci, gdzie znajduje się $tablica. To jest jasne. Ale dlaczego przy okazji zmienna $tablica też staje się referencją?
O rety, no przeciez przez caly czas to tlumacze...
Wczytaj sie w ten tekst z manuala:
Cytat
czyli nie $a wskazuje na $b lub odwrotnie, lecz $a oraz $b wskazują na to samo miejsce.
Tak zrobili i tak jest. Nie ma co sie nad tym rozwodzic.
Jarod
Ok. Wiem co napisali w manualu bo czytałem zanim napisałem posta. Było to dla mnie dziwne. Dzięki za odzew.

pzdr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.