Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:9388 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 9329 invoked by uid 1010); 19 Apr 2004 18:11:01 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 9250 invoked from network); 19 Apr 2004 18:10:58 -0000 Received: from unknown (HELO mail.zend.com) (192.117.235.230) by pb1.pair.com with SMTP; 19 Apr 2004 18:10:58 -0000 Received: (qmail 19417 invoked from network); 19 Apr 2004 18:10:51 -0000 Received: from localhost (HELO AndiNotebook.zend.com) (127.0.0.1) by localhost with SMTP; 19 Apr 2004 18:10:51 -0000 Message-ID: <5.1.0.14.2.20040419210951.01ed2d30@127.0.0.1> X-Sender: andi@127.0.0.1 X-Mailer: QUALCOMM Windows Eudora Version 5.1 Date: Mon, 19 Apr 2004 21:10:40 +0300 To: "Sterling Hughes" ,, In-Reply-To: <20040419163410.2E78D575971@mail.mbobo.org> References: <5.1.0.14.2.20040419112627.03efaa00@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: RE: [PHP-DEV] Interface inheritance From: andi@zend.com (Andi Gutmans) 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:zeev@zend.com] >Sent: Monday, April 19, 2004 1:49 AM >To: internals@lists.php.net >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