For Programmers: Free Programming Magazines  


Home > Archive > PHP Documentation > June 2007 > #41819 [Bgs->Opn]: Old style Constructor inconsistencies









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author #41819 [Bgs->Opn]: Old style Constructor inconsistencies
oancea at gmail dot com

2007-06-27, 8:00 am

ID: 41819
User updated by: oancea at gmail dot com
Reported By: oancea at gmail dot com
-Status: Bogus
+Status: Open
-Bug Type: Scripting Engine problem
+Bug Type: Documentation problem
Operating System: *
PHP Version: 5.2.3
New Comment:

Re-open to mark as a documentation problem.


Previous Comments:
------------------------------------------------------------------------

[2007-06-27 08:59:14] oancea at gmail dot com

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"!

------------------------------------------------------------------------

[2007-06-27 08:50:16] tony2001@php.net

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] tony2001@php.net

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
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com