Portál AbcLinuxu, 10. května 2025 02:31

Dotaz: PHP - Objasnění zápisu

30.10.2014 19:07 Matějíček
PHP - Objasnění zápisu
Přečteno: 298×
Odpovědět | Admin
Ahoj, nechápu tento zápis, může někdo objasnit? Děkuji
$var = 'text';
$var = '

'.$var.'

';
Není to náhodou hodně špatně? Co na to říká paměť? A jak to, že to vůbec funguje? Není správně tohle?
$var1 = 'text';
$var = '

'.$var1.'

';

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (rADOn)
FrostyX avatar 30.10.2014 19:34 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejdříve se ti vyhodnotí pravá strana od rovnítka, takže ''.$var.'' se vyhodnotí na 'text' a až potom se to uloží do proměnné nalevo od rovnítka, tedy do $var.
FrostyX.cz | 1984 was not supposed to be an instruction manual.
30.10.2014 20:20 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Oba zápisy udělají zhruba totéž, jen ten první bude o něco málo pomalejší a vezme si o drobek víc paměti. Navíc ten první způsob může narušit logiku programu - nikoli však výsledek.

Je tedy lepší používat druhý způsob.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
30.10.2014 20:34 Matějíček
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Co prosím znamená, že může narušit logiku programu ?
30.10.2014 21:04 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Tak tedy příklad. Mám string a chci ho ošetřit pro výstup do HTML.
$out = "Adam & syn";
:
$out = htmlspecialchars($out);
:
echo $out;
Dvojtečkami jsem naznačil, že tam může být naplnění jiných proměnných. Představ si, že si omylem smažeš prostřední řádek nebo ho omylem budeš mít pod sebou 2×. Program ti zdánlivě bude fungovat, ale bude dávat chybné výsledky.

Často se takové chyby objevují v opomenutí ošetření proti SQL injection (pokud někdo ještě nepoužívá prepared statements). Stačí přidat jeden sloupec a jednoduše zapomenout ho ošetřit.

Pokud pokaždé použiješ další proměnnou, nestane se ti to. Je to pojistka proti vlastním chybám a také umožníš procesoru efektivněji přeskládat instrukce.

Kromě toho to např. ve funkcionálních jazycích ani jinak nejde.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
31.10.2014 20:28 Matějíček
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
To znamená, že ten zápis je taky špatně? Správně by to mělo být tato ? Díky
$out = "Adam & syn";
:
$out1 = htmlspecialchars($out);
:
echo $out1;
31.10.2014 20:30 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Bingo!
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
xxxxxx avatar 31.10.2014 13:07 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Můžete to, prosím, rozvést? Zajímalo by mě, co se v paměti přesně stane a proč ten první způsob bude pomalejší. Vyhodnocení pravé strany obou způsobů musí fungovat stejně, zabrat stejně času i paměti, nebo ne? V druhém způsobu budu mít o proměnnou více, nebo ji uvolní GC?
31.10.2014 14:49 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Přesný mechanismus neznám, ale v principu půjde asi o to, že u prvního způsobu se GC volá 2×, ale u druhého jen 1× a uvolní oba objekty současně.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
xxxxxx avatar 31.10.2014 16:20 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: PHP - Objasnění zápisu
Mnohokrát děkuji, to je přesně to, co jsem chtěl vědět :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.