[wp-trac] [WordPress Trac] #14920: Noop function called and WP_Dependencies constructors conceptuall broken
WordPress Trac
wp-trac at lists.automattic.com
Tue Sep 21 10:33:39 UTC 2010
#14920: Noop function called and WP_Dependencies constructors conceptuall broken
--------------------------+-------------------------------------------------
Reporter: hakre | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
--------------------------+-------------------------------------------------
See [15639]
In PHP4, extending a class and providing the PHP 4 constructor function
(function named as class) will override the existing, complex constructor
structure that is part of class WP_Dependencies.
So at first, the constructor is conceptually broken:
In #10861 it was argumented the complex structure is for extending, this
little PHP 4 code demonstrates that this principle does not work:
{{{
<?php
/**
* PHP 4 constructors and inheritance
*/
class foo_parent {
function foo_parent() {
printf("%s()\n", __FUNCTION__);
$this->__constructor();
}
function __constructor() {
printf("%s()\n", __FUNCTION__);
}
}
class foo extends foo_parent {
function foo() {
printf("%s()\n", __FUNCTION__);
}
}
$test = new foo();
?>
}}}
Output:
{{{
X-Powered-By: PHP/4.4.2
Content-type: text/html
foo()
}}}
As the constructor only need to call itself (if it's non-overridden), it
is already called. If the extending class needs it's own constructor, it
only needs to define it. In this case, the parent's constructor won't be
called any longer.
Next to the fact that it does not what it is inteded for, PHP 5 is
compatible with PHP 4 constructors, so there is no need to introduce a
expensive variable function call to a function that is NOOP ing.
But that's not the end. As child classes (e.g. WP_Scripts) use the PHP 5
constructor only, their parent implementation is not called making it
useless. Instead they only need to implement their PHP 4 constructor. to
have the same behavior (variables can not be passed by reference with
variable function calls via {{{call_user_func_array()}}}).
The current implementation is hard to understand, conceptually broken and
makes the code hard to read.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/14920>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list