V běžných programovacích jazycích se text (string) vkládá do dvojitých uvozovek, zatímco znak (char) do jednoduchých. V PHP i jiných dynamicky typovaných jazycích se ovšem string může udávat v jednoduchých i složených uvozovkách.
Rozdíl v uvozovkách
V PHP v jednoduchých uvozovkách 'text' nelze používat escape sekvence. Jediné, které fungují, jsou \\ a \'. Všechno ostatní bude ignorované a vypíše se, jak je psáno. Rovněž proměnné nebudou nahrazeny jejich obsahem, ale bude vypsána s dolarem a jménem.
Složené uvozovky naopak nahrazují veškeré proměnné a veškeré escape sekvence. Pokud v textu zahrnu název proměnné, bude nahrazena jejím obsahem. Kompletní výpis escape sekvencí najdete v dokumentace na PHP.net.
Příklad
$i = 73; $s = "Pavel"; $a = [8 => "hodnota"]; //------------------------------------ // Jednoduché uvozovky //------------------------------------ echo 'Ignorují \n escape sekvence kromě \' a \\ '; //Vypíše: Ignorují \n escape sekvence kromě ' a \ echo 'Ale ignorují $i "proměnné" a vypíšou {$a[8]} \$s vše'; //Vypíše: Ale ignorují $i "proměnné" a vypíšou {$a[8]} \$s vše //------------------------------------ // Složené uvozovky //------------------------------------ echo "Neignorují \n žádné \100 'escape sekvence' \$ "; //Vypíše: Neignorují žádné @ 'escape sekvence' $ echo "A proměnné $i nahradí \$s obsahem {$a[8]} a vypíšou $s - \xA9"; //Vypíše: A proměnné 73 nahradí $s obsahem hodnota a vypíšou Pavel - ©
Mé první setkání při regulárních výrazech
S jiných chováním jsem se prvně setkal při psaní regulárních výrazů. Potřeboval jsem hledat znak dolar, proto jsem napsal do patternu \$. PHP preprocesor toto však nahradil ještě dříve, než řetězec vstoupil do funkce preg_match. Proto je nutné buď využít jednoduché uvozovky, nebo dvojtou escape sekvenci \\\$.
Pokud jste seznámeni s tímto chováním, problém asi mít nebudete. Ale než jsem na toto přišel, hodně krát jsem se podivoval, proč mi mé kódy nefungují. Snad vám to ulehčí práci a nebudete tápat jak já!
Buď první, kdo přidá komentář. Zatím zde nic není