Autor Zpráva
Yur4Y
Profil
Pri tvorbe svojej template triedy (podobnej ako v phpBB) som si prácu veľmi zľahčil použitím eval(). Kód, ktorý vygenerujem template triedou, vyzerá dajme tomu nejak takto (samozrejme, že tak nevyzerá, ale tiež začína a končí plaintextom, ktorý môže obsahovať PHP vsuvky):
$text = 'foo <?php echo "bar";?> baz';

A ten teraz potrebujem eval()núť. Logicky som to skúšal takto:
eval( '?>' . $text . '<?php' );

To mi ale nepochopiteľne vracia
foo bar baz<?php
miesto očakávaného
foo bar baz

Proste preto, aby som videl očakávaný výsledok, musím '<?php' pri volaní eval() vynechať:
eval( '?>' . $text );

Prečo? Logicky mi to tak vychádza, že v eval()e je ukončovacia značka ?>, tak aby mohol PHP skript ďalej bežať, musím znova pridať otváraciu značku (na konci eval()u). Aj keď pozriem do tej phpBB template triedy, je tam niečo takéto:
eval(' ?>' . $this->compiled_code[$handle] . '<?php ');
Nechápem :(
Nox
Profil
http://cz.php.net/manual/en/function.sprintf.php ?
Jan Tvrdík
Profil
Nox:
Tak teď se přiznám, že jsem tvoji odpověď nepochopil.
Yur4Y
Profil
Nox
Nie, ja nepotrebujem sprintf. Používam eval(), lebo v mojich template súboroch sú premenné, podmienky, cykly atď. Pár preg_replace() a všetko parádne ide.
Vychádzam ale z toho, že
<?php
//nejaký PHP kód
$text = 'foo <?php echo "bar";?> baz';
eval( '?>' . $text . '<?php' );
//zasa nejaký PHP kód
?>
by malo byť to isté, čo
<?php
//nejaký PHP kód
?>
foo <?php echo "bar";?> baz
<?php
//zasa nejaký PHP kód
?>
Preto moc nerozumiem, prečo to <?php nie je vyžadované, resp. je nežiaduce.
Mastodont
Profil
Yur4Y
Proč si myslíš, že sis pomocí eval zjednodušil práci? Střídání HTML a PHP je zcela normální a IMHO rychlejší než volání eval.
Yur4Y
Profil
Mastodont
Ja viem, že to je normálna vec, ale na začiatku sú v tých template súboroch podmienky a premenné zapisované nie pomocou PHP syntaxe, ale podobne, ako v phpBB, ak to poznáte. Ten PHP kód, ktorý eval()ujem, vzniká až po niekoľkých preg_replace a nejakých cykloch. To ale nie je pointa problému, ja by som akurát chcel vedieť, prečo to <?php je tam nazvyš.
blizz_boz
Profil
Yur4Y

funkcia eval vykonáva PHP kód, ktorý sa nachádza v prememnnej tým že dáš na začiatok
?>
nebude vykonávať php ale spracovávať HTML. nwm aký zmysel má to
<?php
na konci ?

ak chceš aby sa spracovávalo HTML tak správny zápis je
eval("?>$text");

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: