Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Referencje w PHP
Forum PHP.pl > Forum > PHP
Luneth
Znalazłem ostatnio taki artykuł. Jeśli dobrze zrozumiałem autora, to gdziekolwiek nie zastosujemy referencji to zwiększy nam to wydajność. smile.gif Pytanie jak się ma to do rzeczywistości? Myślałem, że referencje po prostu są takimi aliasami do tej samej wartości, bo wskaźnikami nie są, a gdyby były to chyba wówczas można by mówić o wzrostach wydajności. Kiedy w ogóle warto stosować referencje? Określmy, że środowiskiem naszej problematyki jest bardziej rozbudowany kod obiektowy (powiedzmy framework)? Pomijam przykłady z manuala, typu zmienianie wartości zmiennej przez funkcję bez zwracania jej wartości smile.gif
230005
Stosuj tam gdzie chcesz aby funkcja "zwróciła dwie lub więcej wartości". Co do wydajności - struktury, które zajmują najwięcej pamięci - obiekty - i tak są przekazywane przez referencję. Myślisz, że jeśli do funkcji przekażesz jakiegoś integera przez referencję, to w widzialny sposób odbije się to na szybkości działania skryptu? Ok, jeśli powiedzmy masz jakąś przeogromną tablicę, to faktycznie możesz ją przekazać przez referencję...
Zyx
Autor podanego wpisu się myli. Referencje nie tylko nie przyspieszają, ale i mogą spowolnić wykonywanie skryptu, jeśli stosujemy je wyłącznie do przyspieszania. Interpreter PHP stosuje leniwe kopiowanie, tj. tworzy fizyczną kopię wartości dopiero wtedy, gdy ma być ona zmieniona. Jeżeli funkcja nie modyfikuje oryginalnej wartości, żadne kopiowanie nie będzie mieć miejsca, zatem stosowanie referencji do "niewykonywania kopiowania" nie ma żadnego uzasadnienia.
Crozin
Cytat
Stosuj tam gdzie chcesz aby funkcja "zwróciła dwie lub więcej wartości".
Wtedy zwraca się tablicę/obiekt.

Kiedy stosować referencje: gdy ich właściwości są Ci potrzebne. Raczej na wydajność nie musisz patrzeć (patrz post Zyxa).
230005
Crozin: albo (bo wygląda na to, że jest taka możliwość) możesz po prostu użyć referencji winksmiley.jpg.
dr_bonzo
Jak ja używam referencji:

1. Przy obiektach nie mam wyboru (i to jest zaleta, w porownaniu do koszmaru z php4, gdzie w praktyce zawsze musiałbyś wymuszać referencje)
2. Nie używam chyba, że pkt 3
3. Uzywam tylko dla tablic które przekazuję do innych funkcji które je modyfikują, dodają nowe elementy (tu można by array_merge użwać) itp.
Np. funkcja walidująca pola, dokłada do tablicy komunikaty błędów, i jednocześnie zwraca booleana stwierdzającego czy walidacja przeszła czy nie. Oczywiście można było zwracać tablicę z 2ma elementami - bool i array zamiast użyć referencji.
Ogólnie - w systemie na >1000 klas moich, referencji użytych zostało < 50 (część pochodzi ze starych klas naszych libów - i używa ref. dla obiektów).
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.