Bei durchdachter Programmierung ist eval überhaupt kein Problem. Die Umsetzung mit eval ist vergleichsweise einfach und performancestark. Wichtig sind vor allem die Absicherung aller Inputvariabeln und die richtige Verwendung von Anführungszeichen.
Replaces in Templates - was ist ideal?
Einklappen
X
-
Original geschrieben von S.Oliver
performancestark
Ein ersetzen der Platzhalter per preg_replace ist 2 bis 3 mal so schnellTBT
Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!
PHP 2 All • Patrizier II Browsergame
Kommentar
-
Original geschrieben von S.Oliver
[....]Bei durchdachter Programmierung ist[....][color=blue]MfG Payne_of_Death[/color]
[color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
[color=red]Merke:[/color] [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->
Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Kommentar
-
Original geschrieben von Payne_of_Death
Dann hab ich $this->block[$file_name]['blockx'] und da sind alle gleiche Blöcke aneinandergekettet........
Beim Parsen habe ich eine Einfügemarke wo ich genau das Array bzw. diesen Block damit ersetze.....
Nochmal ne Frage zu eval, wie arbeitet die Funktion denn, dass sie so lahm ist? Prüft sie die den gesamten String für jede exisitierende Variable einzeln? Ich hätte ja eigentlich gedacht, dass eval sogar schneller ist als bspw. 50 mal str_replace oder ähnliches?
Kommentar
-
Original geschrieben von MehrMeerHer
Das macht doch Sinn bei Blöcken, wo sich der Content nicht ändert, oder versteh ich das falsch?
Wenn ich extern z.B. eine Query starte und mir eine Table generieren lassen möchte der durch das Template formatiert wird....Muss ich ja den selben Block mehrmals parsen lassen durch das Template......
Und wenn ich eben alles sofort ersetze kann ich den block nicht nochmals rausfischen weil er bereits ersetzt wurde, mit anderen Worten ich habe dann den Template Block verloren......
Nochmal ne Frage zu eval, wie arbeitet die Funktion denn, dass sie so lahm ist? Prüft sie die den gesamten String für jede exisitierende Variable einzeln? Ich hätte ja eigentlich gedacht, dass eval sogar schneller ist als bspw. 50 mal str_replace oder ähnliches?[color=blue]MfG Payne_of_Death[/color]
[color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
[color=red]Merke:[/color] [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->
Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Kommentar
-
Durch richtiges Setzen von Anführungszeichen kann man eine Menge Speed rausholen, weil der PHP Interpreter dann wirklich nur die Variabeln ersetzt. Ein einfaches eval("hier kommt der ganze mist mit $variabeln") dauert natürlich sehr lange.
Kommentar
-
Original geschrieben von TobiaZ
@oliver.
du kannst ja mal nen beispiel script machen. dann lass ich meine lite(!)-Klasse man dagegen antreten...OffTopic:
Darf man Wetten abschließen
[color=blue]MfG Payne_of_Death[/color]
[color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
[color=red]Merke:[/color] [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->
Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Kommentar
-
Original geschrieben von TobiaZ
@oliver.
du kannst ja mal nen beispiel script machen. dann lass ich meine lite(!)-Klasse man dagegen antreten...
Hat denn jemand mal ein paar gute Beispielschnipsel für mich, damit ich mir ein richtiges Bild machen kann? Ich hab hier auf jeden Fall nicht den Durchblick, und es sieht so aus, als müsste ich meinen Code verbessern
Aber ich versteh nicht so richtig, wie eure guten Lösungen aussehen. Der Download Link zu der Klasse bei den Schnipseln funzt nicht, hab davon mehrere getestet...aber es scheint, als hätte Ihr was Besonderes. Irgendwas suchen und testen möchte ich auch nicht, meist sind public Schnipsel Müll.
Kommentar
-
unter http://tbt.dyndns.org/dev_bench hatte ich mal angefangen einen Vergleich mehrerer Template Systeme zu schreiben. Da sind auch einige hier aus den Codeschnipseln dabeiZuletzt geändert von TBT; 05.01.2005, 21:51.TBT
Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!
PHP 2 All • Patrizier II Browsergame
Kommentar
-
Ich bin gerade dabei etwas neues für mein neues Portalsystem zu entwickeln (naja was heißt neu das gabs bestimmt schon mal vorher).
Damit das ganze zu 100% Multilanguage kompatibel wird und auch die Templates 100% austauschbar sein sollen (auch mit mehreren frei wählbaren Skin Packs). Habe ich mir folgendes überlegt:
1.)
Jedes Skin bassiert auf einem Basis Wrapper also zB.
PHP-Code:<html>
<%Header%>
<%Menu%>
<div>
<%Content%>
</div>
<%Footer%>
</html>
// Ich gehe zum Veranschaulichen jetzt mal nur auf das Menü ein
2.)
Nachdem das Grundgerüst steht werden nun die Makros geladen.
ein Makro könnte zb so aussehen:
PHP-Code:<a href="<#HOME PATH #>act=onlinegames">{#go_onlinegames#}</a>
// Auf die Platzhalter komme ich noch zu sprechen
// Die Makro Platzhalter sehen so aus:
<&LINK ONLINEGAMES&>
// wir habe also:
<html>
<ol>
<li><a href="<#HOME PATH #>act=contact>{#go_contact#}</a></li>
<li><a href="<#HOME PATH #>act=onlinegames">{#go_onlinegames#}</a><li>
</ol>
</html>
3.) Nun kommt es zum Replacen der Language Variabeln
PHP-Code:
// Die Language Datei vereinfacht:
$lang = array(
'go_contact' => "Kontakt",
'go_onlinegames' => "Onlinegames"
)
// Die Replacements der Language Variablen sehen so aus:
{#Variable#}
// in unserem Beispiel haben wir nun:
<html>
<ol>
<li><a href="<#HOME PATH #>act=contact>Kontakt</a></li>
<li><a href="<#HOME PATH #>act=onlinegames">Onlinegames</a><li>
</ol>
</html>
4.) Systemvariablen ersetzen:
PHP-Code:// Die Systemvariablen entstehen im Laufe des Skriptes es gibt nicht sehr viele von ihnen zB.:
HOME PATH = [url]http://www.url.de/index.php?;[/url]
/ in unserem Beispiel haben wir nun:
<html>
<ol>
<li><a href="http://www.url.de/index.php?act=contact>Kontakt</a></li>
<li><a href="http://www.url.de/index.php?act=onlinegames">Onlinegames</a><li>
</ol>
</html>
5.) Replacen des Main Content:
PHP-Code:// Der BBCode wird schon beim Eintragen in die DB geparst, daher brauchen
// wir danach nichts mehr zu replacen die normalen Variablen sehen so aus
{Content}
Kommentar
Kommentar