Autor Zpráva
Yur4Y
Profil
Už niekoľkokrát som tu čítal názor, že použitie eval()u je "prasárna", naposledy od Timy-ho. Ak pozriem napríklad do triedy template takého premakaného systému, ako phpBB, vidím eval, je to najjednoduchšia možnosť. Vie mi niekto povedať dôvod, prečo eval() nepoužívať?
Nox
Profil
No zaprvé nemyslím že by bylo někdy nutné to použít a zadruhé ... může tam někdo propašovat nějaký kód a co pak?
S tím může natropit hodně neplechy
Mastodont
Profil
Za prvé - záleží na tom, co do eval() předáváš, pokud tam jsou nějaká data od uživatele, hrozí průser při libovolném útoku.
Za druhé - eval() je hodně pomalá funkce.
TomášK
Profil
http://zdrojak.root.cz/clanky/javascript-vykonnostne-neprijemne-konstrukce/
DoubleThink
Profil *
PHP je celkem celkem triviální jazyk bez nějakých složitějších objektových nebo typových vazeb, takže si myslím, že zpracování skriptu evalem nebude nějak drasticky pomalejší. Možná, pokud bys dělal nějaké brikule s referencemi a třídami obecně, tak by si s tím pak možná garbage collector nevěděl rady, ale nevím.

Prasárna je to spíš z toho důvodu, že se obecně nedoporučuje interpretovat obyčejné texty - a už vůbec ne texty z externích zdrojů. Šablony se nejčastěji zpracovávají klasicky sérií regulárů (taky často s eval-přepínačem mimochodem, ale tam už s kontrolou, co do něj leze).
SwimX
Profil
Já jsem eval použili na webech jen jednou a to zde:
<?php
$sporty_zahlavi = array("fotbal", "hokej", "tenis", "golf", "basketbal");
$i = 1;
foreach($sporty_zahlavi as $v){      
  ?>
<div class='sport <?=$v?>'>
  <h3><a href='<?="/$lang/redir-from-menu/$i/"?>'><?php eval("echo ucfirst(LNG_".strtoupper($v).");"); echo ($lang=='cs'?'ové':'')." ".LNG_SOUSTREDENI?></a></h3>
  <div class='form'> .... </div>
</div>
<?php
  $i++;
}
?>

kde pomocí eval vypisuji konstantu pro konkrétní sport, ve které je uložen název sportu v konkrétním jazyce.

Yur4Y:
při správném použití (aby ho nešlo zneužít) v tom nevidím prasárnu. Proč bych měl dělat další pole s názvy konstant které pak v cyklu vypisovat, když mi eval usnadní práci..?
Majkl578
Profil
SwimX
fuj, proc nepouzijes constant()?
SwimX
Profil
Majkl578:
protože ho neznám. Díky :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: