phpbar.de logo

Mailinglisten-Archive

[php] OOP in PHP5

[php] OOP in PHP5

Johannes Schlueter schlueter at phpbar.de
Son Mai 16 21:32:16 CEST 2004


Hi,

On Sunday 16 May 2004 19:59, Roland Tapken wrote:
> Ich find es sehr toll dass man bei der Übergabe von Objekten an
> Funktionen nun eine Klasse erzwingen kann, der das Objekt angehören
> muss. Allerdings ist dieses Feature mehr oder weniger unbrauchbar wenn
> man Funktionen nicht überladen kann. Ist das inzwischen irgendwie
> möglich?

Ich denke mal Du willst wissen ob sowas geht:

<?php
function foo(someClass $objekt) {
    echo 1;
}

function foo(someOtherClass $objekt) {
    echo 2;
}
?>

Das geht _nicht_ (ansosnten hilft auch ein kurzes testen, ein aktuelles PHP5 
sollte ja jeder parat liegen haben, ansonste ist es ja auch schnell 
kompiliert, Ergebnis ist jedenfalls in der Art:: "Fatal error: Cannot 
redeclare foo() (previously declared in -:2) in - on line 8") und das wird 
auf absehbare Zeit auch nicht anders werden. Dazu gab es schon ein paar mal 
entsprechende Diskussionen[1] auf der PHP-internals Liste[2], die alle damit 
endeten, dass das nich implementiert werden wird. Für die Argumente empfehle 
ich das Archiv zu durchsuchen...

Typehints haben in PHP das Ziel es unnötig zu machen in einer Funktion/Methode 
abfragen zu müssen ob man die richtige Klasse übergeben bekommen hat, so dass 
man direkt Methodenaufrufe machen kann ohne in der Funktion/Metode Gefahr zu 
laufen, dass es die Methode nicht gibt.

Also
<?php
function foobar(someClass $objct) {
    $object->doSomething();
}

// vs.

function foobar($object) {
    if (!is_a($object, 'someClass')) {
        throw new exception('Paramter is no instance of someClass');
    }

    $object->doSomething();
}
?>

Ob man es wirklich braucht... Während der entwicklung ischer ganz nett, später 
sollte es ja _eigentlich_ immer die richtigen Klassen an richtiger Stelle 
geben ;-)

Im aktuellen PHP5RC2 ist es bei einem Typehint zu einer bestimmten Klasse auch 
NULL zu übergeben - was zu Folge hat, dass man in der funktion/Methode doch 
wieder kontrollieren muss ob es NULL oder Klasse ist. Dieses Verhalten soll, 
wenn ich die Diskussion richtig verfolgt hbe, aber bis zu RC3 (bzw. wurde 
inzwischen) dahingehend geändert, dass NULL nicht erlaubt wird und für PHP5.1 
eine Möglichkeit geschaffen werden soll, dass auch NULL möglich ist, damit 
man einen Typehint als optionalen Paramter haben kann. In der Diskussion[3] 
waren da solche Konstrukte:

<?php
function foo(SomeClass OR NULL $class = NULL);
//oder auch
function bar(NULLABLE SomeClass $class = NULL);
?>

Damit sind aber auch die Entwickler nicht zufrieden weswegen dass, wie gesagt, 
auf PHP5.1 verschoben wurde.

johannes

[1] http://marc.theaimsgroup.com/?l=php-dev&m=108247263010912&w=2
[2] http://php.net/mailing-lists.php
[3] http://marc.theaimsgroup.com/?l=php-dev&m=108344217529912&w=2

php::bar PHP Wiki   -   Listenarchive