Pokazywanie postów oznaczonych etykietą PHP_podstawy. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą PHP_podstawy. Pokaż wszystkie posty

niedziela, 31 maja 2015

[PHP] Kiedy cudzysłów, a kiedy apostrof

TRUE
3673455057687492124
...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.
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji