Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #3847

Re: return types

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.php
Subject Re: return types
Date 2016-03-31 21:40 +0200
Organization PointedEars Software (PES)
Message-ID <3243755.WBM996tjSl@PointedEars.de> (permalink)
References <1t56fced94i14b9n3e8%sfroehli@Froehlich.Priv.at>

Show all headers | View raw


Stefan Froehlich wrote:

> 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?

Nein.  (Vorsicht, Logik.)

> Dass die Signaturen kompatibel sein müssen ist klar,

Ich finde auch das zu eng gedacht.  Wenn ich eine Methode überschreiben 
kann, sollte ich das auf beliebige Art tun können.  Polymorphismus 
impliziert nicht, dass Gleichbenanntes auch gleich funktionieren muss; denn 
ich kann die Klasse eines Objekts ermitteln und die polymorphe Methode so 
aufrufen, wie es für die jeweilige Klasse korrekt ist.

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

ACK.  Darüberhinaus sehe ich nicht einmal die Notwendigkeit, dass die 
Rückgabetypen polymorpher Methoden in einer klassenhierarchischen Beziehung 
zueinander stehen.  Wenn zum Beispiel eine abgeleitete Klasse eine 
gleichnamige Eigenschaft hat, in der ein Wert mit einem anderen Typ 
gespeichert ist als in einer übergeordneten Klasse und ein Getter dafür 
existiert, so ist es nicht einzusehen, dass der Getter nicht gleich heissen 
darf *und* einen anderen Rückgabetyp hat als den, welchen der so 
überschriebene Getter hat.

> Sollte man das als Bug melden,

Ja.

> oder hat das am Ende sogar einen tieferen Sinn, den ich bloss nicht sehe?

Nein, es ist insbesondere in einer Sprache mit dynamischer Typüberprüfung 
widersinnig, und man findet es in keiner anderen, mir bekannten, 
objektorientierten Programmiersprache.

-- 
PointedEars
Zend Certified PHP Engineer 
<http://www.zend.com/en/yellow-pages/ZEND024953> | Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.

Back to de.comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-03-31 09:35 +0000
  Re: return types k@rl.pflaesterer.de (Karl Pflästerer) - 2016-03-31 12:42 +0200
  Re: return types "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-03-31 14:16 +0200
    Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-04-15 06:37 +0000
    Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-06-22 08:48 +0000
      Re: return types "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-06-22 12:25 +0200
        Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-06-22 14:49 +0000
          Re: return types "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-06-22 17:47 +0200
            Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-06-23 08:23 +0000
              Re: return types "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-07-02 01:03 +0200
  Re: return types Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-03-31 21:40 +0200
    Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-04-01 16:26 +0000
      Re: return types "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-04-02 19:23 +0200
        Re: return types Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-02 20:36 +0200
        Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-04-11 21:18 +0000
      Re: return types Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-02 20:33 +0200
        Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-04-11 21:32 +0000
          Re: return types Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-19 20:24 +0200
            Re: return types Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2016-04-20 07:05 +0000
              Re: return types Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-04-21 02:55 +0200

csiph-web