Donnerstag, 17. Mai 2012

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Media





April 2006
aus PHP Magazin Ausgabe: 02.2003
get pear/
Einblicke in das PHP Extension and Application Repository
von Alexander Merz

Michel J.Radwin schrieb in seinem Vortrag zum Einsatz von PHP bei Yahoo: PEAR is not CPAN - Stimmt! PEAR ist kein CPAN-Klon. PEAR will durch Qualität überzeugen, nicht durch Quantität. Trotzdem: PEAR wächst und wächst; selbst DSL-Nutzer treten während des Herunterladens eines kompletten PEAR-CVS-Abzugs mittlerweile den Gang zur Kaffeemaschine an.


Cache_Lite
Der Einsatz eines PHP-basierten Caches kann sich schnell als falsche Lösung von Performance-Problemen erweisen: der Cache-Code selbst benötigt eine gewisse Rechenzeit. Wenn diese Rechenzeit gleich oder gar größer der geplanten eingesparten Skriptlaufzeit ist, haben Sie nichts gewonnen. Ein mächtiger PHP-basierter Cache wie PEAR::Cache ist oft bei kleineren Skripten fehl am Platz. Cache_Lite kann dann ideal sein: geringe Codegröße, wenige Befehle; Vor- oder Nachteil, je nach Auffassung: als Cache-Speicher dienen Dateien. Für den Einsatz brauchen Sie nur drei Methoden:

<?php
require_once 'Cache/Lite.php';
$options = array('cacheDir' => './cache',
'lifeTime' => 3600);
$cache = new Cache_Lite($options);
if(!($html = $cache->get('IndexSeite'))) {
// Cache-Daten erzeugen, z.B. hier eine
// komplette HTML-Seite
$html = ...
$cache->save($html, 'IndexSeite');
}
echo $html;
?>

Das Skript erzeugt eine HTML-Seite. Befindet sie sich nicht im Cache, wird sie darin unter dem Namen IndexSeite gespeichert. Im Konstruktor wird mit dem $options-Parameter festgelegt, dass die Cache-Daten im Unterverzeichniss cache gespeichert werden und die Lebensdauer der Cache-Daten eine Stunde beträgt (Angabe in Sekunden).
Cache_Lite besitzt einige zusätzliche Funktionen; es kann Cache-Daten gruppieren und die Cache-Daten auf Integrität prüfen.

Formulargenerierung
Ein Freund fragte mich, was denn besser ist: HTML_QuickForm oder HTML_OOH_Form; beide bilden HTML-Formulare auf Objekte ab. Für den Programmierer erscheint ein Formular nur noch als Black-Box - er definiert zuerst, welche zulässigen Werte erwartet werden und fragt im zweiten Durchlauf die eingegebenen Werte wieder ab; kein direkter Kontakt mit HTML, Variablen- und Formularnamen, kein Stress mit client- und serverseitiger Überprüfung - alles schon eingebaut. Die Funktionsweise beider Packages ist soweit noch identisch.
Die Auswahl ist von zwei Punkten abhängig: Welcher Einfluss auf die Formular-Gestaltung ist notwendig; und wie viel Zeit soll in die Einarbeitung investiert werden? HTML_Quickform ist einfach zu erlernen und schnell, aber eine Anpassung an eigene Layoutbedürfnisse ist fast nur über CSS möglich. HTML_OOH_Form orientiert sich an den Layoutmanagern und Oberflächenobjekten von Java, Qt und Gtk und ist dementsprechend mächtig. Wer mit der Desktop-Programmierung vertraut ist, wird kein Problem haben; wer bisher reine Konsolen- bzw. Webanwendungen schrieb, muss eine steile Lernkurve bewältigen. Das Package ist übrigens eine Weiterentwicklung der OOH-Forms aus der populären PHPLib.

HTML_Template_IT
Geht man nach der Anzahl der Nachfragen, ist dieses Package nach PEAR:DB am populärsten. Zwei Fragen tauchen immer wieder auf: Wie kann ich einen Template-Block behalten, obwohl ich darin keine Ersetzungen vornehme? Und wie verarbeite ich verschachtelte Blöcke?
Zur ersten Frage: Wer versucht hat, das Problem mit einem setCurrentBlock() mit anschließendem parseCurrentBlock() zu erschlagen, wird wissen: es geht nicht. Deshalb exisitiert schon seit längerem dafür die Methode touchBlock('Blockname') - nur wussten das wohl bisher die wenigsten.

<-- BEGIN block1 -->
<-- BEGIN block2 -->

<-- BEGIN blockA -->
{VariableA}
<-- END blockA -->

<-- BEGIN blockB -->
{VariableB}
<-- END blockB -->

<-- END block2 -->
<--END block1 -->

Zur zweiten Frage: HTML_Template_IT verarbeitet verschachtelte Blöcke von innen nach außen und gleichrangige von unten nach oben. Das Template oben muss also folgendermaßen verarbeitet werden (die Einrückung entspricht der Einrückung der Blöcke im Template):

...
$tpl = new HTML_Template_IT();
$tpl->loadTemplatefile('template.tpl');

$tpl->setCurrentBlock('blockA');
$tpl->setVariable('VariableA', 'Inhalt');
$tpl->parseCurrentBlock('blockA');

$tpl->setCurrentBlock('blockB');
$tpl->setVariable('VariableB', 'Inhalt');
$tpl->parseCurrentBlock('blockB');

$tpl->touchBlock('block2');
$tpl->touchBlock('block1');

$tpl->parse();
echo $tpl->get();

20 Semester studiert ...
und ihre Skripte benötigen nur Rechenoperationen, die jeder Grundschüler beherrscht und den teuer bezahlten mathematischen Koprozessor im Server langweilt? Jesus M. Castagnetto hat eine Reihe an mathematischen und naturwissenschaftlichen Packages für PEAR bereitgestellt. Warum nicht mal einen Besucher-Counter mit komplexen Zahlen? Oder rechnen Sie in ihren Progammen mit Vektoren, ihr Kunde wird nie wieder ihre Skripte verschlimmbessern!?
Alexander Merz ist freier Autor und Programmierer, Sie erreichen ihn unter alexmerz@php.net.


    Hat Ihnen dieser Artikel gefallen? Dann abonnieren Sie das PHP Magazin direkt über unser

zur vorherigen Seite
zurück
an den Anfang der Seite
nach oben
Diesen Artikel drucken
drucken
Diesen Artikel weiterempfehlen
empfehlen

Software & Support Media GmbH