mirror of
https://github.com/php/php-src.git
synced 2025-01-21 03:03:41 +08:00
- Fixed bug #51176 (Static calling in non-static method behaves like $this->)
This commit is contained in:
parent
fcf1058d6b
commit
79f618833f
4
NEWS
4
NEWS
@ -69,7 +69,9 @@ PHP NEWS
|
||||
- Fixed memory leak in the realpath cache on Windows. (Pierre)
|
||||
- Fixed memory leak in zip_close. (Pierre)
|
||||
|
||||
- Fixed #51059 (crypt crashes when invalid salt are given). (Pierre)
|
||||
- Fixed bug #51176 (Static calling in non-static method behaves like $this->).
|
||||
(Felipe)
|
||||
- Fixed bug #51059 (crypt crashes when invalid salt are given). (Pierre)
|
||||
- Fixed bug #50952 (allow underscore _ in constants parsed in php.ini files).
|
||||
(Jani)
|
||||
- Fixed bug #50940 (Custom content-length set incorrectly in Apache SAPIs).
|
||||
|
@ -43,11 +43,11 @@ __call:
|
||||
string(3) "ABC"
|
||||
__call:
|
||||
string(3) "ABC"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "XYZ"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "WWW"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "ABC"
|
||||
__callstatic:
|
||||
string(1) "A"
|
||||
|
@ -35,17 +35,17 @@ call_user_func('self::y');
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "ABC"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "ABC"
|
||||
__call:
|
||||
string(3) "xyz"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(3) "www"
|
||||
__call:
|
||||
string(1) "y"
|
||||
__call:
|
||||
__callstatic:
|
||||
string(1) "y"
|
||||
ok
|
||||
__callstatic:
|
||||
|
32
Zend/tests/bug51176.phpt
Normal file
32
Zend/tests/bug51176.phpt
Normal file
@ -0,0 +1,32 @@
|
||||
--TEST--
|
||||
Bug #51176 (Static calling in non-static method behaves like $this->)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo
|
||||
{
|
||||
public function start()
|
||||
{
|
||||
self::bar();
|
||||
static::bar();
|
||||
Foo::bar();
|
||||
}
|
||||
|
||||
public function __call($n, $a)
|
||||
{
|
||||
echo "instance\n";
|
||||
}
|
||||
|
||||
public static function __callStatic($n, $a)
|
||||
{
|
||||
echo "static\n";
|
||||
}
|
||||
}
|
||||
|
||||
$foo = new Foo();
|
||||
$foo->start();
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
static
|
||||
static
|
||||
static
|
@ -28,9 +28,9 @@ foo::BAZ();
|
||||
--EXPECT--
|
||||
nonstatic
|
||||
string(6) "fOoBaR"
|
||||
nonstatic
|
||||
static
|
||||
string(6) "foOBAr"
|
||||
nonstatic
|
||||
static
|
||||
string(6) "fOOBAr"
|
||||
static
|
||||
string(3) "bAr"
|
||||
|
@ -30,5 +30,5 @@ a::Foo();
|
||||
--EXPECT--
|
||||
__callstatic: Test
|
||||
__call: Test
|
||||
__call: Bar
|
||||
__callstatic: Bar
|
||||
__callstatic: Foo
|
||||
|
@ -953,13 +953,13 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, char *f
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user