Yes, but I claim that inheritance is exactly the same thing. I comes with an interface which needs to be adhered to. It does tend to be inconsistent if we E_ERROR out on interfaces and not on inheritance.

At 09:31 AM 4/19/2004 -0700, Sterling Hughes wrote:
I agree.  Interfaces are useless if you can't guarantee that a class
actually implements them.  Violating an interface is violating a contract
and it should be an compile error - indeed, when coding I mostly rely on not
properly implementing interfaces to be a compile error.

-Sterling

-----Original Message-----
From: Zeev Suraski [mailto:[EMAIL PROTECTED]
Sent: Monday, April 19, 2004 1:49 AM
To: [EMAIL PROTECTED]
Subject: [PHP-DEV] Interface inheritance

All,

Yesterday, someone complained that classes that implement interfaces
succeed in doing so even when they don't satisfy the prototypes.  While
this does cause an E_STRICT message to be emitted, it would go unnoticed in
most cases, as E_STRICT is off by default, in some cases - even when people
think it's on.

I believe that this behavior is wrong.  I believe that classes should not
be allowed to say they implement an interface X, unless they actually
implement all of the methods in that interface with methods that are
compatible with its prototypes.

Reasoning:
- Interfaces (and for that matter, abstract classes) are a new feature in
PHP 5, used solely to enforce implementing classes to abide to the
prototypes.  There's no issue of downwards compatibility, and there's no
other use case.
- Without this, the whole mechanism of class type hints is rendered
useless.  With it, it gives users the full power of class type hints (and
instanceof, for that matter) - because they always have the option of
adding an interface for their base classes.

Suggested behavior:
Any method that implements (directly or indirectly) an interface method or
an abstract method, will have implementation checks fully enforced, with an
E_COMPILE_ERROR emitted in case of an error.
Behavior for methods that override regular parent methods, that do not have
interface/abstract prototypes, will not change (E_STRICT message).

Comments welcome - we'd like to sort this out before RC2...

Zeev

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to