Referencje wewnątrz konstruktora
Tworzenie referencji wewnątrz konstruktora może prowadzić do dziwnych efektów. Ten rozdział ma pomóc w unikaniu takich problemów.
<?php |
Sprawdźmy, czy jest jakaś różnica pomiędzy
$bar1
, który jest tworzony przy pomocy operatora
przypisania =, a $bar2
, który został
stworzony używając operatora referencji =&...
<?php |
Wydaje się, że nie ma żadnej różnicy, ale na prawdę jest jedna, i to
bardzo istotna: $bar1
i
$globalref[0]
NIE są referencjami,
NIE są tą samą zmienna. Dzieje się tak, ponieważ
"new" nie zwraca domyślnie referencji, ale kopię.
Notatka: Zwracanie kopii zamiast referencji nie powoduje utraty wydajności (od PHP 4 używane jest zliczanie referencji). Jednakże zazwyczaj lepiej jest pracować poprostu z kopiami zamiast referencji, poniewać tworzenie referencji zabiera trochę czasu, podczas gdy tworzenie kopii obiektów teoretycznie w ogóle nie zabiera czasu (chyba że któraś z tych zmiennych jest dużą tablicą lub obiektem i jedno z nich ulega zmianie, po czym tej samej zmianie ulegają pozostałe zmienne; wtedy lepiej jest użyć referencji do zmieniania ich równolegle).
<?php |
Ustatni przykład. Postaraj się go zrozumieć/
<?php |
Powyższy przykład wyświetli:
klasa A: 10 klasa B: 10 klasa B: 10 klasa A: 11 klasa B: 11 klasa B: 11 |
Poprzedni | Spis treści | Następny |
Magiczne funkcje __sleep i __wakeup | Początek rozdziału |