Beitrag von Sander (8133 Beiträge) am Donnerstag, 14.November.2002, 23:54.
CB: oop in bp
hi Christoph,
du hast mir mal erzählt, das ich mit includes lustige oop-spielchen treiben kann. hast du das wirklich schon mal probiert? ich komme zur keiner lösung, weder mit include, noch ohne. könntest du mal ein kleines beispiel zeigen?
Grüsse
Sander
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 15.November.2002, 04:07.
Re: CB: oop in bp
Naja, von OOP hab ich eigentlich nich gesprochen, ich meinte, dass man wiederverwendbare Funktionen in eigenen Templates auslagern kann und diese dann includen...
Also einfaches Beispiel:
template "math":
sub power
{
return $_[0]*$_[0];
}
...und viele weitere schöne subs...
template "bla":
<perl>
...
</perl>
Man kann natürlich mehrere subs in 1 Template packen und/oder mehrere Templates includen - wie mans braucht... Is eigentlich genauso wie in C oder PHP oder in allen anderen Sprachen, die's so gibt ;-)
OOP an sich funktioniert aber auch, wie in Perl halt, äh, fast...:
template "oop1":
package blubb;
sub new
{
my $this=shift;
my $class=ref($this) || $this;
my $self={};
bless $self, $class;
return $self;
}
sub store
{
my($self, $key, $value)=@_;
$self->{$key}=$value;
}
sub fetch
{
my($self, $key)=@_;
return $self->{$key};
}
sub all_out
{
my($self)=@_;
my($key);
foreach $key (keys %$self)
{
main::out "$key=$self->{$key}<br>";
}
}
1;
und template "oop2":
<perl>
$bla->store("Name", "Hans");
$bla->store("Alter", "34");
$bla->store("Farbe", "Grün");
out $bla->fetch("Alter")."<p>";
das obige "fast" deshalb, weil die bp-befehle wie z.b. "out" in dem package "blubb" nich mehr zur verfügung stehen und deshalb mit vollem namen angesprochen werden müssen, also "main::out" (s. beim all_out)... weiss garnich obs dafür ne lösung gibt....
abgesehen davon (wenn mans weiss...) funzt das perl-OO schon ganz gut in bp ,-)
Antworten
Beitrag von Marco (840 Beiträge) am Freitag, 15.November.2002, 07:19.
Re: CB: oop in bp
Find ich klasse!
Kannst Du das vielleicht nochmal für doofe übersetzen ;-)
Marco
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 18.November.2002, 14:41.
Re: CB: oop in bp
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 15.November.2002, 09:30.
Re: CB: oop in bp
ich hab immer das problem, das die klasse nach dem include im neuen <perl>-block gar nicht bekannt ist. somit auch kein new funzt.
Sander
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 15.November.2002, 09:56.
Re: CB: oop in bp
so, gerade hab ich deins ausprobiert - geht auch nicht :-(
wenn ich main::out "$key=$self->{$key}<br>";
schreibe gibts einen syntaxfehler
bei
main::out ("$key=$self->{$key}<br>");
kommt gar keine Ausgabe...
Sander
Antworten
Beitrag von Jurenda (305 Beiträge) am Montag, 18.November.2002, 08:20.
Re: CB: oop in bp
Hallo Sander:
Seltsam, bei mir funktioniert das Beispiel von Christoph!
Hast Du auch nicht auf das 1; vergessen?
Wenn Du alles in ein Template schreibst (geht natürlich), dann brauchst Du in der Regel ein
package main;
nach dem 1;. Erst dann findet Perl auch Deine Klassen und vor allem Deine out's wieder.
Grüße von Jurenda :-})
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 18.November.2002, 09:37.
Re: CB: oop in bp
ja, so passt es innerhalb eines templates...
wenn ich aber blubb includen will geht nix, kommt nur weißer bildschirm... aber genau darauf kommt es mir hauptsächlich an.
Hast du das Beispiel komplett so übernommen wie von CB geschrieben?
Grüsse
Sander
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 18.November.2002, 14:42.
Re: CB: oop in bp
Also ich hab das genauso getestet, bei mir funzts... Gib mal nen Link ,-)
Antworten