Skip to content

Commit f26f6d9

Browse files
authored
Add test for backtrace with aliased trait (#8705)
1 parent 14ced88 commit f26f6d9

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

Zend/tests/bug69180-backtrace.phpt

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
--TEST--
2+
Bug #69180: Backtrace does not honor trait conflict resolution / method aliasing
3+
--FILE--
4+
<?php
5+
6+
trait T {
7+
public function __get($name): string {
8+
var_dump(__METHOD__);
9+
print_r(array_map(fn ($v) => $v['class'] . '::' . $v['function'], debug_backtrace()));
10+
11+
return '=' . $name;
12+
}
13+
}
14+
15+
class Model {
16+
use T {
17+
T::__get as private __t_get;
18+
}
19+
20+
public function __get($name): string {
21+
var_dump(__METHOD__);
22+
return $this->__t_get($name);
23+
}
24+
}
25+
26+
class X extends Model {}
27+
28+
class Y extends Model {
29+
public function __get($name): string {
30+
var_dump(__METHOD__);
31+
return parent::__get($name);
32+
}
33+
}
34+
35+
class Z extends Model {
36+
private function __x_get($name): string {
37+
var_dump(__METHOD__);
38+
return parent::__get($name);
39+
}
40+
41+
public function __get($name): string {
42+
var_dump(__METHOD__);
43+
return $this->__x_get($name);
44+
}
45+
}
46+
47+
class P extends Model {
48+
private function __t_get($name): string {
49+
var_dump(__METHOD__);
50+
return parent::__get($name);
51+
}
52+
53+
public function __get($name): string {
54+
var_dump(__METHOD__);
55+
return $this->__t_get($name);
56+
}
57+
}
58+
59+
$m = new X();
60+
$m->a;
61+
62+
echo "\n";
63+
64+
$m = new Y();
65+
$m->a;
66+
67+
echo "\n";
68+
69+
$m = new Z();
70+
$m->a;
71+
72+
echo "\n";
73+
74+
$m = new P();
75+
$m->a;
76+
77+
?>
78+
--EXPECT--
79+
string(12) "Model::__get"
80+
string(8) "T::__get"
81+
Array
82+
(
83+
[0] => Model::__t_get
84+
[1] => Model::__get
85+
)
86+
87+
string(8) "Y::__get"
88+
string(12) "Model::__get"
89+
string(8) "T::__get"
90+
Array
91+
(
92+
[0] => Model::__t_get
93+
[1] => Model::__get
94+
[2] => Y::__get
95+
)
96+
97+
string(8) "Z::__get"
98+
string(10) "Z::__x_get"
99+
string(12) "Model::__get"
100+
string(8) "T::__get"
101+
Array
102+
(
103+
[0] => Model::__t_get
104+
[1] => Model::__get
105+
[2] => Z::__x_get
106+
[3] => Z::__get
107+
)
108+
109+
string(8) "P::__get"
110+
string(10) "P::__t_get"
111+
string(12) "Model::__get"
112+
string(8) "T::__get"
113+
Array
114+
(
115+
[0] => Model::__t_get
116+
[1] => Model::__get
117+
[2] => P::__t_get
118+
[3] => P::__get
119+
)

0 commit comments

Comments
 (0)