ID: 41819 User updated by: oancea at gmail dot com Reported By: oancea at gmail dot com Status: Bogus Bug Type: Scripting Engine problem Operating System: * PHP Version: 5.2.3 New Comment:
Well, as far as I can see, both of those functions are constructors, one (__constructor) specifies the signature of an object, and the other one implements it. According to this bug (fixed in 5.1): http://bugs.php.net/bug.php?id=35720 in the end is the same method. Anyway, thank you for your time, and I hope that at least the documentation will add my example as "don't do this because __construct and old style constructor are two different functions for interfaces or abstract classes"! Previous Comments: ------------------------------------------------------------------------ [2007-06-27 08:50:16] [EMAIL PROTECTED] Nobody said it cannot be used, but __construct() and XMLConfigurator() are two different functions, so the result you get is pretty much expected. ------------------------------------------------------------------------ [2007-06-27 08:48:25] oancea at gmail dot com How about this one: abstract class IConfigurator { public abstract function __construct(); } class XmlConfigurator extends IConfigurator { public function XmlConfigurator() { printf("%s\n", __METHOD__); } } $config = new XmlConfigurator(); Can you point me to the exact documentation where it states that the old style constructor should not be used, at least not in interfaces or in abstract classes? Thank-you. ------------------------------------------------------------------------ [2007-06-27 08:28:54] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php ------------------------------------------------------------------------ [2007-06-27 07:46:51] oancea at gmail dot com Description: ------------ There is an inconsistency between the old style class constructor (class name) and the new one (__construct) when defining interfaces (see reproduce code bellow). Reproduce code: --------------- interface IConfigurator { public function __construct(); } class XmlConfigurator implements IConfigurator { public function XmlConfigurator() { printf("%s\n", __METHOD__); } } $config = new XmlConfigurator(); Expected result: ---------------- One of: * XmlConfigurator::XmlConfigurator * Fatal error: old style constructor is deprecated Actual result: -------------- Fatal error: Class XmlConfigurator contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (IConfigurator::__construct) in ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41819&edit=1