return types

31/03/2016 - 11:35 von Stefan+Usenet | Report spam
Ich habe mich jetzt einmal ein wenig mit return types herumgespielt, weil
ich mir davon ein bisschen an zusàtzlicher Kontrolle verspreche. Zum einen
erfüllt sich das (noch) nicht, weil sicherlich die Hàlfte meiner Methoden
alternativ auch NULL zurückgeben kann, was momentan nicht unterstützt wird.

Zum anderen aber:

#v+
<?php

class Foo {
public function cloneMe() : Foo {
return clone $this;
}
}


class Foo_Child extends Foo {
public function cloneMe() : Foo_Child {
return clone $this;
}
}
?>
#v-

führt zu:

| PHP Fatal error: Declaration of Foo_Child::cloneMe(): Foo_Child must be
| compatible with Foo::cloneMe(): Foo in /home/sfroehli/test.php on line 13

Man möge mir die eher sinnfreie Methode verzeichen, aber - ist das nicht
ein bisschen zu eng gedacht? Dass die Signaturen kompatibel sein müssen ist
klar, aber eine *Einschrànkung* des return types in einer abgeleiteten
Klasse ist doch vollkommen unproblematisch; das bedeutet ja nichts weiter,
als dass von allen zulàssigen Foos nur diejenigen in Frage kommen, die
zufàllig auch Foo_Childs sind (und das wiederum taucht in Objekthierarchien
an jeder zweiten Ecke in der einen oder anderen Form auf).

Sollte man das als Bug melden, oder hat das am Ende sogar einen tieferen
Sinn, den ich bloss nicht sehe?

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan. Hastig und spannend!
(Sloganizer)
 

Lesen sie die antworten

#1 k
31/03/2016 - 12:42 | Warnen spam
Stefan+ (Stefan Froehlich) writes:

Ich habe mich jetzt einmal ein wenig mit return types herumgespielt, weil
ich mir davon ein bisschen an zusàtzlicher Kontrolle verspreche. Zum einen
erfüllt sich das (noch) nicht, weil sicherlich die Hàlfte meiner Methoden
alternativ auch NULL zurückgeben kann, was momentan nicht unterstützt wird.

Zum anderen aber:


#v+
<?php

class Foo {
public function cloneMe() : Foo {
return clone $this;
}
}


class Foo_Child extends Foo {
public function cloneMe() : Foo_Child {
return clone $this;
}
}
?>
#v-


führt zu:

| PHP Fatal error: Declaration of Foo_Child::cloneMe(): Foo_Child must be
| compatible with Foo::cloneMe(): Foo in /home/sfroehli/test.php on line 13

Man möge mir die eher sinnfreie Methode verzeichen, aber - ist das nicht
ein bisschen zu eng gedacht? Dass die Signaturen kompatibel sein müssen ist
klar, aber eine *Einschrànkung* des return types in einer abgeleiteten
Klasse ist doch vollkommen unproblematisch; das bedeutet ja nichts weiter,
als dass von allen zulàssigen Foos nur diejenigen in Frage kommen, die
zufàllig auch Foo_Childs sind (und das wiederum taucht in Objekthierarchien
an jeder zweiten Ecke in der einen oder anderen Form auf).

Sollte man das als Bug melden, oder hat das am Ende sogar einen tieferen
Sinn, den ich bloss nicht sehe?




Laut RFC gibt es momentan nur invariante Rückgabetypen.

https://wiki.php.net/rfc/return_typ...validation

KP

Ähnliche fragen