Hi,
On Fri, Jul 29, 2011 at 05:37, Laruence <[email protected]> wrote:
> Hi:
> about #55311.https://bugs.php.net/bug.php?id=55311
>
> I found it maybe for some reason, that somebody change the
> if/elseif sequence to make this bug.
>
> but I am not sure about why he do this, so I refer to maillist, any
> idea?
This is not a bug.
If you call a method using the Foo::bar() syntax, you don't
necessarily get a static call.
A static call is made if either:
1) the target method is declared as static
2) There is no compatible object context at the time of the call.
In this case, it is not a static call, as the method is undeclared
(hence cannot be declared as static) and you do have a compatible
object context. So __call is used, not __callstatic.
Best,
>
> Index: Zend/zend_object_handlers.c
> ===================================================================
> --- Zend/zend_object_handlers.c (revision 313905)
> +++ Zend/zend_object_handlers.c (working copy)
> @@ -988,13 +988,13 @@
> if (!fbc && zend_hash_find(&ce->function_table, lc_function_name,
> function_name_strlen+1, (void **) &fbc)==FAILURE) {
> efree(lc_function_name);
>
> - if (ce->__call &&
> + if (ce->__callstatic) {
> + return zend_get_user_callstatic_function(ce,
> function_name_strval,
> function_name_strlen);
> + } else if (ce->__call &&
> EG(This) &&
> Z_OBJ_HT_P(EG(This))->get_class_entry &&
> instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
> return zend_get_user_call_function(ce,
> function_name_strval,
> function_name_strlen);
> - } else if (ce->__callstatic) {
> - return zend_get_user_callstatic_function(ce,
> function_name_strval,
> function_name_strlen);
> } else {
> return NULL;
> }
> --
> Laruence Xinchen Hui
> http://www.laruence.com/
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Etienne Kneuss
http://www.colder.ch
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php