ugrás a tartalomhoz

Állandó használata heredoc-ban

Anonymous · 2006. Aug. 15. (K), 18.05
Rövid kérdésem az lenne, lehet-e a here-doc string megadási formában már definiált állandót használni - persze úgy, hogy behelyettesítődjön - ill. mi ennek a módja.
Többféleképpen próbálgattam hiába, a manualban a két témáról külön van csak szó, összefüggésében nem, itt a kereső nem adott választ és egy fél órát gugliztam is hiába.

Köszönettel.
 
1

háát, ötlet 1

toxin · 2006. Aug. 15. (K), 22.20
mivel eddig nemválaszolt senki ez már kihívás, eztaláltam ki :)

<?php
define('foo','futam');
$constants = get_defined_constants();

echo <<<FOO
{$constants['foo']}
FOO;


?>
ennél nagyob kreativitás majd esetleg holnap :)) mindenestre jobb hiján elmegy
2

köszi

Anonymous · 2006. Aug. 15. (K), 23.19
Köszönöm az ötletet.
Egy hasonlóra jutottam magam is, csak reméltem, van a php-ben az állandók kezelésére való 'nyelvi fordulat'. Tehát, hogy ilyen átmeneti tömb használata nélkül lehessen beágyazni állandót egy heredoc formába.
Közben merült fel, hogy előfordulhat, hogy függvényt akarnák beletenni, ami itt megoldható:

$x = "valami "._ALLANDOM." valami ".fuggvenyem()." valami";
Ezt kellene heredoc formába:

$x = <<<EOF
na idehogy írjam a fentit?
EOF;
Egyelőre marad az átmeneti tömbös megoldás. További ötletek esetleg?
3

preg e minta módosítóval

toxin · 2006. Aug. 16. (Sze), 08.58

<?php
define('_ALLANDOM','!!bigyó!!');
function fuggvenyem(){
    return '!!izé!!';
}
$valtozom = '!!nami!!';

$x= <<<FOO
valami0{_ALLANDOM}valami1{$valtozom}valami2{fuggvenyem()}valami3
FOO;

$x = preg_replace('/({)(.+?)(})/se','(\\2)',$x);

echo $x;
?>
? :)
4

megnézem

Anonymous · 2006. Aug. 16. (Sze), 12.28
köszi, de csak délután, vagy este tudok jobban ránézni, most csak bekukkantottam. Lehet, hogy ez jó lesz az adott célra.
5

köszi

Anonymous · 2006. Aug. 17. (Cs), 23.36
Ez most pont azt csinálja, mait szeretnék. Köszönöm a segítséget.
Kár, hogy csak trükközéssel lehet megcsinálni ilyenre a heredoc és az idézőjeles string megadási módok eltérő viselkedése miatt.
6

naja

toxin · 2006. Aug. 18. (P), 10.21
de a heredoc úgylátszik nem sablonmotornak készült :)
7

pedig épp arra használom

Anonymous · 2006. Aug. 18. (P), 13.49
A html-t funkconális részekre bontva heredoc-ba teszem, a műveleti függvényben pedig sprintf() -el adom hozzá az aktuális értékeket.
Eddig a függvényben volt a html is összeállítva, ami nem éppen szerencsés. Azért választottam a heredoc + sprintf() módszert, mert így jól olvasható html kódot tudok rögzíteni (nincs \", de kifejti a változókat is).
Egy nagyobb részt már átírtam, nincs mérhető lassulás.
8

kitaláltám ám

toxin · 2006. Aug. 18. (P), 14.02
hogy azt akarsz, azért írtam :)) bár én inkább a külön sablonfájl (akarmi.tpl + file_get_contents() és arra a reguláris kifejezéseket ) + lefordított fájl módszert preferálom (lehetővé válik a gyorstárazás, pl.) , ill. direkt sablonkezelőt cuccosokat (a módszer, a php fejlesztés felsőfokon c. könyv 120 oldalán a smarty-val nagyon ötletes pl.)
9

ciklus kezelése problémás

Anonymous · 2006. Aug. 18. (P), 14.48
Biztos jó (jobb) módszer, amit leírtál, de már meglevő rendszert akarok módosítani úgy, hogy legkevésbé fájjon. A teljes tartalom sablonba tevéséhez nagyon sok mindent át kellene tervezni. Ezért funkcionális részekre bontom, pl. egy hírblokk, termék blokk. Mivel ezeken belül is lehetnek ciklussal kiírandó részek (pl. akárhány termék adat), egyszerűbbnek tűnt, ha a termékblokk html-jét is szétbontom részekre. Előbb a részeket helyettesítem be sprintf-el, aztán az egész blokkot rakom össze. Egy részt meg akár ciklusba tehetek.
Ha viszont minden rész html önálló temp.fájlt kap, nagyon sok temp. fájlt kellene behúzni. Ezért ez a kompromisszumos megoldást választottam.
Az eredménye olvasható, könnyen módosítható html és php kód, lassulás nélkül.