Która informacja dotycząca przedstawionego kodu jest prawdziwa?
<?php $a="Ala"; $a.="Ola"; echo $a; ?>
A. Znak kropki "." jest operatorem konkatenacji.
B. W zmiennej $a wartość "Ala" zostanie zamieniona na wartość "Ola".
C. Zostanie wypisany komunikat "OlaAla".
D. Znak "=" jest operatorem porównania dwóch zmiennych.
Pytanie z egzaminu CKE, czerwiec 2020 (arkusz E.14-SG-20.06).
W tym kodzie najważniejszy jest operator kropki, czyli operator konkatenacji w PHP. Konkatenacja oznacza łączenie tekstów, fachowo: łączenie łańcuchów znaków. Najpierw do zmiennej a trafia napis 'Ala'. Potem instrukcja a .= 'Ola' działa jak skrócony zapis: a = a . 'Ola'. Czyli do aktualnej zawartości zmiennej zostaje dopisany kolejny tekst, bez kasowania poprzedniej wartości. Wynikiem działania echo będzie więc 'AlaOla'. Moim zdaniem to jeden z tych operatorów, które warto dobrze zapamiętać, bo w PHP używa się go bardzo często, np. przy budowaniu komunikatów, składaniu fragmentów HTML, tworzeniu zapytań tekstowych albo dopisywaniu danych do zmiennej w pętli. Dobra praktyka jest taka, żeby rozumieć różnicę między zwykłym przypisaniem = a dopisaniem .=, bo pomyłka może łatwo zmienić wynik programu. W nowoczesnym kodzie często stosuje się też interpolację zmiennych w napisach, ale operator . dalej jest standardowym i poprawnym narzędziem PHP.
Warto tu spokojnie prześledzić wykonanie programu linia po linii, bo błędy w tym pytaniu wynikają głównie z pomylenia operatorów. Zmienna a na początku dostaje wartość 'Ala'. Nie ma tu jeszcze żadnego łączenia ani porównywania, tylko zwykłe przypisanie wartości. Potem pojawia się zapis .=, który w PHP oznacza dopisanie tekstu do aktualnej zawartości zmiennej. To nie jest zamiana wartości na nową, tylko skrót od operacji a = a . 'Ola'. Dlatego końcowy napis to 'AlaOla', a nie 'OlaAla'. Kolejność ma znaczenie: stary tekst jest po lewej stronie, nowy jest dopisywany po prawej. Częsty błąd polega na tym, że ktoś widzi drugi napis i zakłada, że zostanie wypisany jako pierwszy, ale konkatenacja nie odwraca kolejności znaków. Znak = również nie służy do porównywania dwóch zmiennych. W PHP jest operatorem przypisania, czyli zapisuje wartość do zmiennej. Do porównania używa się ==, a w dobrym, bezpieczniejszym stylu często ===, bo sprawdza nie tylko wartość, ale też typ danych. Gdyby kod miał naprawdę zastąpić 'Ala' napisem 'Ola', musiałby zawierać zwykłe przypisanie a = 'Ola'. Tutaj zastosowano dopisywanie, więc poprzednia zawartość zostaje zachowana. Z mojego doświadczenia takie drobiazgi są bardzo praktyczne, bo przy formularzach, komunikatach i generowaniu tekstu w PHP operator konkatenacji pojawia się non stop.