On Thu, Oct 7, 2010 at 7:56 AM, Nathan Nobbe <quickshif...@gmail.com> wrote:

> Hi,
>
> Probly rehashing an old conversation here, but I'm wondering why the
> following isn't supported
>
> <?php
> abstract class AbstractServer {}
> class ConcreteServer extends AbstractServer {}
>
> abstract class AbstractClient {
>  abstract function doStuff(AbstractServer $o);
> }
>
> class ConcreteClient extends AbstractClient {
>  function doStuff(ConcreteServer $o) {}
> }
> ?>
>
> This results in a fatal
> Fatal error: Declaration of ConcreteClient::doStuff() must be compatible
> with that of AbstractClient::doStuff() in
> /Users/quickshiftin/gitRepos/timberline/php-api-v15-client/testOverride.php
> on line 11
>
> I was reading a few posts from way back when
>
> http://marc.info/?t=107774904800001&r=1&w=2
>
> yet still find myself wondering.  I think it can be said here that if
> there's a contract defined by AbstractClient::doStuff, that same contract
> is
> honored by ConcreteClient::doStuff.  I also think changing the language to
> support this notion wouldn't raise BC issues for the most part (at all?)
> since at the moment you're forced to move to the lowest common denominator
> in the tree, in this case
>
> class ConcreteClient extends AbstractClient {
>  function doStuff(AbstractServer $o) {}
> }
>
> your feedback appreciated,
>
> -nathan
>


It was discussed recently:

http://marc.info/?l=php-internals&m=128220433328115&w=2

Tyrael

Reply via email to