...czyli różnica pomiędzy cudzysłowem, a apostrofem.
W PHP, jak i we właściwie każdym języku wszelkie zmienne typu string obejmować musimy w cudzysłowy, lub apostrofy. Mamy tutaj dowolność, jeśli chodzi o wybór - obie formy są poprawne, byleby znak otwierający zgadzał się ze znakiem kończącym. Na pierwszy rzut oka używanie cudzysłowów albo apostrofów nie różni się od siebie działaniem. Różnica jednak jest, o czym wiele osób - szczególnie początkujących nie ma pojęcia. Różnica jest w sposobie interpretacji zawartości objętej cudzysłowem/apostrofem jak i co za tym idzie - w szybkości przetwarzania kodu przez interpreter.
Pisząc kod zawsze powinniśmy starać się o to, aby był on jak najprostszy i jak najszybciej kompilowany przez interpreter. Te malutkie z pozoru różnice w czasie wykonywania kodu urastają do trochę większych, gdy serwer musi obsłużyć takich wykonań tysiące i ma ku temu ograniczone zasoby. Trzeba o tym pamiętać. Wróćmy zatem do tematu o jakim jest ten tekst.
Popatrzmy na przykład poniżej. Z pozoru obie linijki kodu nie różnią się niczym i wykonają się tak samo, ale jak to mówią - pozory mylą.
[code]
<?php
$zmienna1 = "jakiś tekst";
$zmienna2 = 'jakiś tekst';
?>[/code]
Dla człowieka niby tak samo, a jednak dla interpretera PHP zupełnie inaczej. Na czym więc polega różnica w obu zapisach (poza faktem wizualnym oczywiście)? Otóż polega ona na tym w jaki sposób PHP traktuje taki ciąg znaków. Aby bardziej zobrazować sobie to na przykładzie, popatrzmy na poniższe:
[code]
<?php
$kolor = 'czerwony';
$str1 = "Mój ulubiony kolor to: $kolor";
$str2 = 'Mój ulubiony kolor to: $kolor';
echo $str1 . '<br />';
echo $str2;
/*
Wynik:
Mój ulubiony kolor to: czerwony
Mój ulubiony kolor to: $kolor
*/
?>[/code]
Jak widać wyświetlenie zmiennej
$str1 i
$str2 daje zupełnie inne wyniki. Powodem jest fakt, iż ciągi objęte w cudzysłowy
( " ) są przez PHP interpretowane, natomiast ciągi objęte w apostrofy
( ' ) już nie. Ciąg objęty w cudzysłowy musi być zatem przez PHP przeparsowany i przetworzony w celu m.in. podstawienia wartości ewentualnie występujących w nim zmiennych, co za tym idzie - jest to jakieś dodatkowe zadanie dla procesora.
Ciąg natomiast objęty w apostrofy jest z marszu traktowany jako zwykły, najzwyklejszy tekst i nie jest w żaden sposób przetwarzany, co za tym idzie - jest "obrabiany" przez PHP o wiele szybciej. Różnicę zauważymy też m.in. w przetwarzaniu znaków specjalnych, jak np. znak końca linii:
[code]
<?php
$str1 = "To jest pierwsza linia.\nTo jest druga linia.";
$str2 = 'To jest pierwsza linia.\nTo jest druga linia.';
?>[/code]
Wyświetlenie teraz zmiennej
$str1 pokaże nam:
[code]
To jest pierwsza linia.
To jest druga linia.[/code]
Natomiast wyświetlenie drugiej zmiennej -
$str2 pokaże:
[code]To jest pierwsza linia.\nTo jest druga linia.[/code]
W drugim przypadku znak
\n nie zostanie w żaden sposób przetworzony na znak końca linii i potraktowany "na surowo".
Trzeba mieć też świadomość, że ciąg objęty w cudzysłowy jest przetwarzany przez PHP nawet wtedy, gdy nie ma w nim żadnych zmiennych, ani żadnych znaków specjalnych (trzeba przecież przeparsować wszystko, aby sprawdzić czy takowe nie występują). Jest to obciążenie dla interpretera i powinno się tego unikać. Pamiętajmy zatem więc, żeby zawsze wszędzie tam, gdzie nie ma konieczności używania cudzysłowów (a czasem taka potrzeba jest) używać zwykłych apostrofów.