NAME

Prty::Object - Basisklasse für alle Klassen der Klassenbibliothek

SYNOPSIS

package MyClass;
use base qw/Prty::Object/;
...

METHODS

Instantiierung

bless() - Blesse Objekt auf Klasse

Synopsis

$obj = $class->bless($ref);

Description

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 Prty::Object ist.

Der Aufruf ist äquivalent zu:

$obj = bless $ref,$class;

Example

$hash = Hash->bless({});

rebless() - Blesse Objekt auf eine andere Klasse um

Synopsis

$obj->rebless($class);

Description

Blesse Objekt $obj auf Klasse $class um.

Der Aufruf ist äquivalent zu:

bless $obj,$class;

Example

$hash->rebless('MyClass');

Exceptions

throw() - Wirf Exception

Synopsis

$this->throw;
$this->throw(@opt,@keyVal);
$this->throw($msg,@opt,@keyVal);

Options

-stdout => $bool (Default: 0)

Erzeuge die Meldung auf STDOUT (statt STDERR), wenn -warning => 1 gesetzt ist.

-stacktrace => $bool (Default: 1)

Ergänze den Exception-Text um einen Stacktrace.

-warning => $bool (Default: 0)

Wirf keine Exception, sondern gib lediglich eine Warnung aus.

Description

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.

Sonstiges

addMethod() - Erweitere Klasse um Methode

Synopsis

$this->addMethod($name,$ref);

Description

Füge Codereferenz $ref unter dem Namen $name zur Klasse $this hinzu. Existiert die Methode bereits, wird sie überschrieben.

Example

MyClass->addMethod(myMethod=>sub {
    my $self = shift;
    return 4711;
});

classFile() - Pfad der .pm-Datei

Synopsis

$dir = $this->classFile;

Description

Ermitte den Pfad der .pm-Datei der Klasse $this und liefere diesen zurück. Die Klasse muss bereits geladen worden sein.

Example

$path = Prty::Object->classFile;
==>
<PFAD>Prty/Object.pm

this() - Liefere Klassenname und Objektreferenz

Synopsis

($class,$self,$isClassMethod) = Prty::Object->this($this);
$class = Prty::Object->this($this);

Description

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.

Example

  • Klassen- sowie Objektmethode:

    sub myMethod {
        my ($class,$self) = Prty::Object->this(shift);
    
        if ($self) {
            # Aufruf als Objektmethode
        }
        else {
            # Aufruf als Klassenmethode
        }
    }
  • Klassenmethode, die als Objektmethode gerufen werden kann:

    sub mymethod {
        my $class = Prty::Object->this(shift);
        ...
    }
  • Objektmethode, die als Klassenmethode gerufen werden kann:

    sub myMethod {
        my ($class,$self,$isClassMethod) = Prty::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;
        ...
    }

VERSION

1.124

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2018 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.