Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Referencja jako argument - czy jest tworzona kopia?
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
mam takie oto coś - jest sobie funkcja, która jako argument pobiera np. tablicę.
W ramach działania funkcji tablica ta nie jest modyfikowana.
Wiem, że w takiej sytuacji nie następuje w pamięci stworzenie kopii lokalnej tej tablicy.


Teraz drugi przypadek - znowu argumentem jest tablica, ale zostaje ona w ramach funkcji zmodyfikowana.
Zgodnie z kilkoma podręcznikami w takiej sytuacji tworzona jest lokalna kopia tablicy, na której to zachodzą te zmiany.
Jeżeli zmiany są niewielkie to i tak zajmuje to 2x tyle pamięci co poprzednio.


No i przypadek do którego mam pytanie: świadomie jako argument podajemy referencję do tablicy.
Jeżeli dobrze myślę, to tu nie ma potrzeby robienia żadnej kopii, więc wszelkie zmiany z definicji są od razu zapisywane w przekazywanej tablicy globalnie.
Nie zwiększamy użycia pamięci.
Mam rację, czy się mylę?


No i jak wygląda ta sama kwestia w wypadku obiektów?
Crozin
Obiekty zawsze przekazywane są przez referencję. Jeżeli chcesz przekazać kopię musisz zrobić to jawnie:
  1. $obj->doSth(clone $otherObject);


Tak, masz rację - dopiero próba modyfikacji zmiennej lokalnej przyczyni się do faktycznego utworzenia kopii danej zmiennej (angielska nazwa kompletnie wypadła mi z głowy... lazy coś-tam) co spowoduje, że do czasu zadziałania GC w pamięci będą dwie kopie ? zużywane będzie więcej pamięci.

Pamiętaj jednak o jednym - w 99% przypadków na pierwszym miejscu ma być logiczność i przejrzystość kodu, a nie zmniejszenie zużycia pamięci o 5 czy 100 KiB.
lukasamd
Dzięki smile.gif

Co do uwagi - wiem, ale tu w grę wchodzi naprawdę spora tablica, zaś funkcja ją modyfikująca działa na zasadzie hooku i chciałem rozwiać wątpliwości smile.gif
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.