Frank Seitz
and 1 contributors

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);

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.

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.

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.108

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

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