mirror of
https://github.com/php/php-src.git
synced 2026-04-25 00:48:25 +02:00
907bf786f1
Bug 48770 was opened due to conflicting expectations about the behavior of:
call_user_func_array(array($this, 'parent::methodName'), array($arg1,$arg2))
The one reporting the 'bug' seemed to think that since the method name was prefixed with
`parent::`, it should call the method in the superclass of the *class where this code appears*.
However, `$this` might be an instance of a subclass. If so, then it is quite reasonable that
`call_user_func_array` will call the method as defined in the superclass of *the receiver*.
So the 'bug' is not really a bug. Therefore, there is no need for an XFAIL in the tests. They
should just pass.
Amend tests to reflect the actual expected behavior of `call_user_func_array`, not what the
person who reported bug 48770 thought it should be.
Closes GH-5386.
51 lines
1.2 KiB
PHP
51 lines
1.2 KiB
PHP
--TEST--
|
|
Bug #48770 (call_user_func_array() fails to call parent from inheriting class)
|
|
--FILE--
|
|
<?php
|
|
|
|
class A {
|
|
public function func($str) {
|
|
var_dump(__METHOD__ .': '. $str);
|
|
}
|
|
private function func2($str) {
|
|
var_dump(__METHOD__ .': '. $str);
|
|
}
|
|
protected function func3($str) {
|
|
var_dump(__METHOD__ .': '. $str);
|
|
}
|
|
}
|
|
|
|
class B extends A {
|
|
public function func($str) {
|
|
call_user_func_array(array($this, 'self::func2'), array($str));
|
|
call_user_func_array(array($this, 'self::func3'), array($str));
|
|
|
|
try {
|
|
call_user_func_array(array($this, 'self::inexistent'), array($str));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage() . \PHP_EOL;
|
|
}
|
|
}
|
|
private function func2($str) {
|
|
var_dump(__METHOD__ .': '. $str);
|
|
}
|
|
protected function func3($str) {
|
|
var_dump(__METHOD__ .': '. $str);
|
|
}
|
|
}
|
|
|
|
class C extends B {
|
|
public function func($str) {
|
|
parent::func($str);
|
|
}
|
|
}
|
|
|
|
$c = new C;
|
|
$c->func('This should work!');
|
|
|
|
?>
|
|
--EXPECT--
|
|
string(27) "B::func2: This should work!"
|
|
string(27) "B::func3: This should work!"
|
|
call_user_func_array(): Argument #1 ($function) must be a valid callback, class 'C' does not have a method 'inexistent'
|