ID: 42256
User updated by: mat at bcclimited dot co dot uk
Reported By: mat at bcclimited dot co dot uk
Status: Open
Bug Type: Documentation problem
Operating System: Windows, Linux
PHP Version: 5.2.4RC1
New Comment:
I wouldn't say "clearly"... It kind of makes sense the way PHP4 works,
and I'd expect that any features that claim to be backwards-compatible
work in the same way as the old version, else the claim is fallacious.
I assume that the PHP4 interpreter looks at all available functions for
one matching the class name and calls it if it exists, whereas PHP5 only
looks in the functions implemented in that class and does not traverse
up to the parent - making it behave as if the function was not
inherited.
I take it this is a "will not fix"/"not broken" status, and I need to
recode all the classes that are constructed like this? :(
Previous Comments:
------------------------------------------------------------------------
[2007-08-10 01:25:42] judas dot iscariote at gmail dot com
Interesting ;) the documentation should also mention that the old PHP4
beahviuor is clearly the wrong thing.
------------------------------------------------------------------------
[2007-08-09 15:01:28] [EMAIL PROTECTED]
Reclassified.
------------------------------------------------------------------------
[2007-08-09 13:40:03] mat at bcclimited dot co dot uk
Nuts, typo. Both the `Users` should start:
class Users extends users_base {
------------------------------------------------------------------------
[2007-08-09 13:26:22] mat at bcclimited dot co dot uk
Oh, thought I'd add a workaround:
class Users {
function Users() {
parent::Users();
}
}
Unfortunately for me, there are one hell of a lot of classes that our
previous programmer built in this fashion, making the workaround
impractical.
------------------------------------------------------------------------
[2007-08-09 13:22:18] mat at bcclimited dot co dot uk
Description:
------------
PHP4-style constructors do not function, in PHP5, in the same way as
they do in PHP4.
The issue lies in when parent constructors are called, or not as the
case may be.
Reproduce code:
---------------
class users_base {
function Users() {
echo "users_base::Users()\n";
}
}
class Users {
// Nothing here.
}
$base = new users_base();
$child = new Users();
Expected result:
----------------
Running the sample code in PHP4 will give the expected result:
users_base::Users()
users_base::Users()
Whereas PHP5 will not call the Users() function in the parent class:
users_base::Users()
I class this as a bug because of the expected PHP5 behaviour as well as
the evident PHP4 behaviour. If the users_base function is renamed to
__construct(), it will get called on BOTH instantiations, as PHP4 does
with its style.
Actual result:
--------------
users_base::Users()
(The child class does not call Users() on instantiation)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42256&edit=1