xref: /PHP-8.0/Zend/tests/bug48770_2.phpt (revision 840e441d)
1--TEST--
2Bug #48770 (call_user_func_array() fails to call parent from inheriting class)
3--FILE--
4<?php
5
6class A {
7    public function func($str) {
8        var_dump(__METHOD__ .': '. $str);
9    }
10    private function func2($str) {
11        var_dump(__METHOD__ .': '. $str);
12    }
13    protected function func3($str) {
14        var_dump(__METHOD__ .': '. $str);
15    }
16    private function func22($str) {
17        var_dump(__METHOD__ .': '. $str);
18    }
19}
20
21class B extends A {
22    public function func($str) {
23        call_user_func_array(array($this, 'parent::func2'), array($str));
24        call_user_func_array(array($this, 'parent::func3'), array($str));
25
26        try {
27            call_user_func_array(array($this, 'parent::func22'), array($str));
28        } catch (\TypeError $e) {
29            echo $e->getMessage() . \PHP_EOL;
30        }
31
32        try {
33            call_user_func_array(array($this, 'parent::inexistent'), array($str));
34        } catch (\TypeError $e) {
35            echo $e->getMessage() . \PHP_EOL;
36        }
37    }
38    private function func2($str) {
39        var_dump(__METHOD__ .': '. $str);
40    }
41    protected function func3($str) {
42        var_dump(__METHOD__ .': '. $str);
43    }
44}
45
46class C extends B {
47    public function func($str) {
48        parent::func($str);
49    }
50}
51
52$c = new C;
53$c->func('This should work!');
54
55?>
56--EXPECT--
57string(27) "B::func2: This should work!"
58string(27) "B::func3: This should work!"
59call_user_func_array(): Argument #1 ($callback) must be a valid callback, cannot access private method B::func22()
60call_user_func_array(): Argument #1 ($callback) must be a valid callback, class B does not have a method "inexistent"
61