Quiq::Object - Basisklasse für alle Klassen der Klassenbibliothek
package MyClass; use base qw/Quiq::Object/; ...
$obj = $class->bless($ref);
Objektorientierte Syntax für bless(). Blesse Objekt (Referenz) $ref auf Klasse $class und liefere die geblesste Referenz zurück. Dies geht natürlich nur, wenn $class eine direkte oder indirekte Subklasse von Quiq::Object ist.
Der Aufruf ist äquivalent zu:
$obj = bless $ref,$class;
$hash = Hash->bless({});
$obj->rebless($class);
Blesse Objekt $obj auf Klasse $class um.
bless $obj,$class;
$hash->rebless('MyClass');
$this->throw; $this->throw(@opt,@keyVal); $this->throw($msg,@opt,@keyVal);
Erzeuge die Meldung auf STDOUT (statt STDERR), wenn -warning => 1 gesetzt ist.
Ergänze den Exception-Text um einen Stacktrace.
Wirf keine Exception, sondern gib lediglich eine Warnung aus.
Wirf eine Exception mit dem Fehlertext $msg und den hinzugefügten Schlüssel/Wert-Paaren @keyVal. Die Methode kehrt nur zurück, wenn Option -warning gesetzt ist.
$this->addMethod($name,$ref);
Füge Codereferenz $ref unter dem Namen $name zur Klasse $this hinzu. Existiert die Methode bereits, wird sie überschrieben.
MyClass->addMethod(myMethod=>sub { my $self = shift; return 4711; });
$dir = $this->classFile;
Ermitte den Pfad der .pm-Datei der Klasse $this und liefere diesen zurück. Die Klasse muss bereits geladen worden sein.
$path = Quiq::Object->classFile; ==> <PFAD>Quiq/Object.pm
($class,$self,$isClassMethod) = Quiq::Object->this($this); $class = Quiq::Object->this($this);
Liefere Klassenname und Objektreferenz zu Parameter $this und zeige auf dem dritten Rückgabewert an, ob die Methode als Klassen- oder Objektmethode gerufen wurde.
Ist $this ein Klassenname (eine Zeichenkette) liefere den Namen selbst und als Objektreferenz undef und als dritten Rückgabewert 1. Ist $this eine Objektreferenz, liefere den Klassennamen zur Objektreferenz sowie die Objektreferenz selbst und als dritten Rückgabewert 0.
Klassen- sowie Objektmethode:
sub myMethod { my ($class,$self) = Quiq::Object->this(shift); if ($self) { # Aufruf als Objektmethode } else { # Aufruf als Klassenmethode } }
Klassenmethode, die als Objektmethode gerufen werden kann:
sub mymethod { my $class = Quiq::Object->this(shift); ... }
Objektmethode, die als Klassenmethode gerufen werden kann:
sub myMethod { my ($class,$self,$isClassMethod) = Quiq::Object->this(shift); $self = $class->new(@_); # Ab hier ist mittels $self nicht mehr feststellbar, # ob die Methode als Klassen- oder Objektmethode gerufen wurde. # Die Variable $isclassmethod zeigt es an. $self->specialMethod if $isClassMethod; ... }
1.133
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.