Instrukcja $liczba2 = &$liczba1; w PHP oznacza, że zmienna $liczba2 staje się referencją do $liczba1. Ten znak ampersanda (&) nie jest żadnym operatorem logicznym, tylko właśnie operatorem referencji w PHP. W praktyce oznacza to, że obie zmienne wskazują na to samo miejsce w pamięci, więc przechowują dokładnie tę samą wartość. Jeżeli później w kodzie napiszesz $liczba1 = 10; to automatycznie $liczba2 też będzie miała wartość 10, i odwrotnie – zmiana $liczba2 zmieni $liczba1. Z mojego doświadczenia w PHP referencje używa się głównie wtedy, gdy chcemy, żeby funkcja modyfikowała przekazaną zmienną bez zwracania jej wyniku, albo gdy operujemy na dużych strukturach danych (tablice, obiekty) i nie chcemy kopiować ich zawartości. Przykład: function zwieksz(&$x){ $x++; } sprawi, że wywołanie zwieksz($liczba1); zmieni wartość zmiennej poza funkcją. To jest typowy, całkiem często spotykany wzorzec w starszych projektach PHP. Warto też pamiętać, że referencja w PHP nie jest tym samym, co wskaźnik w C/C++. Programista nie operuje bezpośrednio na adresach pamięci, tylko na abstrakcji zaprojektowanej przez silnik Zend. Dobra praktyka jest taka, żeby referencji używać oszczędnie i świadomie, bo nadmierne ich stosowanie utrudnia debugowanie, testowanie jednostkowe i zrozumienie przepływu danych w aplikacji. W nowoczesnym kodzie PHP częściej korzysta się z przekazywania obiektów (które zachowują się referencyjnie) oraz z czytelnego zwracania wartości z funkcji. Mimo to, rozumienie mechanizmu referencji jest bardzo ważne, bo nadal pojawia się w wielu istniejących aplikacjach webowych i w zadaniach egzaminacyjnych.
Kod $liczba2 = &$liczba1; w PHP często bywa mylony z różnymi innymi mechanizmami, bo ten sam znak & występuje także w innych kontekstach. Tutaj jednak nie mamy ani wskaźnika w sensie znanym z języka C, ani operacji logicznej. Silnik PHP traktuje taki zapis jako utworzenie referencji, czyli dwóch nazw dla tej samej wartości w pamięci. To jest dość wysokopoziomowa konstrukcja, a nie bezpośrednia manipulacja adresami. Mylenie tego zapisu ze wskaźnikiem bierze się z analogii do C/C++, gdzie & kojarzy się z adresem. W PHP programista nie dostaje jednak do ręki adresów pamięci, nie może ich inkrementować, przesuwać ani wykonywać typowych operacji wskaźnikowych. Referencja w PHP jest bardziej mechanizmem zarządzania zmiennymi przez silnik, ukrytym pod prostą składnią. Dlatego mówienie, że $liczba2 jest wskaźnikiem do $liczba1, jest merytorycznie błędne – to inny poziom abstrakcji. Kolejne częste nieporozumienie dotyczy logiki. Operator negacji logicznej w PHP to !, a nie &, więc zapis &$liczba1 nie może oznaczać negacji. Ampersand w kontekście logicznym w PHP w ogóle nie występuje jako samodzielny operator, więc łączenie go z pojęciem negacji jest całkowicie chybione. Podobnie w przypadku iloczynu logicznego: w PHP używa się && albo and, natomiast pojedyncze & ma inne znaczenie – w starszych wersjach języka było też używane do operacji bitowych oraz właśnie do referencji. Żaden z tych wariantów nie pasuje do odpowiedzi o iloczynie logicznym zmiennej $liczba1. Typowy błąd myślowy polega na tym, że ktoś kojarzy sam znak & z „jakąś logiką” lub „adresami pamięci” i na tej podstawie strzela odpowiedź, zamiast odnieść się do konkretnej składni PHP. W programowaniu webowym, szczególnie w PHP, warto patrzeć na pełny kontekst: gdzie stoi &, czy jest przed nazwą zmiennej w definicji funkcji, przy przypisaniu, czy może pomiędzy wyrażeniami. Dopiero z tego wynika prawidłowa interpretacja. W tym zadaniu kontekst jest jasny: mamy operator referencji przy przypisaniu, więc chodzi wyłącznie o powiązanie dwóch zmiennych z tą samą wartością, a nie o logikę czy wskaźniki w niskopoziomowym znaczeniu.