hotti: Umsetzung der Trennung von PHP- und HTML-Code / des EVA-Prinzips

Beitrag lesen

Moin,

"[..]da ich PHP nicht unterstütze"

weil...? Warum bevorzugst du Perl?

Hauptsächlich wegen genau diesem hier angesprochenen Thema. In der Tat habe ich schonmal begonnen, ein paar Web-Anwendungen, die ich bereits in Perl hatte, nach PHP umzuschreiben. Unter Beibehaltung meines bisherigen Perl-Styles (z.B. Kontrollstrukturen zur Parameterverarbeitung) habe ich feststellen müssen, dass Perl zielführender/produktiver ist, Perl-Code wird übersichtlicher, teamfreundlicher und ist leichter zu pflegen.

Von eimem Parser, wie CGI::param (Perl-Modul CGI.pm) ist PHP weit entfernt. Die param()-Method des CGI-Moduls lässt sich in Perl z.B. infolge Delegierung recht einfach an ein eigenes Objekt binden, ohne alle Methoden von CGI.pm erben zu müssen. Weil das Beispiel so schon ist:

  
package myCMS;  
use CGI;  
  
sub new{  
  my $class = shift;  
  my $self = bless{  
    CGI => CGI->new,  
  ), $class;  
  return $self;  
}  
  
# Delegation  
sub param{  
	my $self = shift;  
	return $self->{CGI}->param(@_);  
}  
  
package main;  
  
my $u = myCMS->new;  
@params = $u->params;  

Versionskonflikte: Ich programmiere seit 1998 mit Perl und die Scripts sind weitgehend unabhängig von der Perl-Verison, erst neulich habe ich ein 10 jahre altes Perl-Script aus meinem Archiv gefischt, es funktionierte auf Anhieb und plattformunabhängig. Perl unterstützt OOP seit v5.

Unicode/Inernationalisierung: Viele in PHP gemachte Seiten, die ich so kenne, haben Probleme mit der Zeichenkodierung, was möglicherweise nicht an PHP an sich liegt sondern eher an der Umsetzung und in dieser Sache spricht auch dieses Forum Bände ;)  Die Unicode-Unterstützung in Perl ist vorzüglich.

DBI: Das I steht für Unabhängigkeit vom RDBMS-Layer. Beruflich habe ich schon zwei Umstellungen von MySQL auf Postgresql und umgekehrt mitgemacht, die erste hat einen halben Tag gedauert, die zweite eine halbe Stunde (einschließlich Kaffepause).

Abschließend noch ein schönes Stück Code zum Thema Trennung der abstract Layer zur redundanten Datenhaltung:

  
my %pbin = ();  
tie(%pbin, 'ORM') || tie(%pbin, 'Objects');  

'ORM' hält die Objekte in einer DB, 'Objects' in einer Datei. Ist die DB mal nicht erreichbar, wird %pbin mit den Daten aus der Datei versorgt.

Zum Thema Datenfernübertragung per HTTP habe ich in eigener Sache ein Modul geschrieben, das wäre in PHP nicht machbar. Dieses Modul serialisiert Objekte oder Sammlungen von Objekten in einen Byte-Stream, der serverseitig wieder in dieselbe Datenstruktur umgewandelt wird, z.B. für den Einbau in eine DB oder eine Datei und natürlich geht die Übertragung auch umgekehrt vom Server zum Client.

Fürs Erste ;)
Hotti