From d8ff45cf543b812d0a37e103e3c2aca5c6a971c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Sat, 21 Jan 2023 11:25:17 +0100 Subject: [PATCH 1/2] Test anonymous class in trait must be declared only once --- Zend/tests/anon/017.phpt | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Zend/tests/anon/017.phpt diff --git a/Zend/tests/anon/017.phpt b/Zend/tests/anon/017.phpt new file mode 100644 index 0000000000000..109646ddcd879 --- /dev/null +++ b/Zend/tests/anon/017.phpt @@ -0,0 +1,43 @@ +--TEST-- +Anonymous class in trait must be declared only once +--FILE-- + 0) { + class A { use TraitWithAnonymousClass; } + var_dump(count(get_declared_classes()) - $c); + + $o = new A(); + var_dump(count(get_declared_classes()) - $c); + + $o->foo(); + var_dump(count(get_declared_classes()) - $c); +} + +eval('class B { use TraitWithAnonymousClass; }'); +var_dump(count(get_declared_classes()) - $c); + +$o = new B(); +var_dump(count(get_declared_classes()) - $c); + +$o->foo(); +var_dump(count(get_declared_classes()) - $c); + +?> +--EXPECT-- +int(1) +int(1) +int(1) +int(2) +int(2) +int(2) From 69248c10bbb6a9f0c84425036ed15cda07cc733c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Sat, 21 Jan 2023 15:21:10 +0100 Subject: [PATCH 2/2] Test static variable in parent trait method --- .../static_variables_parent_trait_method.phpt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Zend/tests/static_variables_parent_trait_method.phpt diff --git a/Zend/tests/static_variables_parent_trait_method.phpt b/Zend/tests/static_variables_parent_trait_method.phpt new file mode 100644 index 0000000000000..6e05d745d300e --- /dev/null +++ b/Zend/tests/static_variables_parent_trait_method.phpt @@ -0,0 +1,45 @@ +--TEST-- +Behavior of static variables in parent trait method +--FILE-- +foo(); +var_dump($a === (new A())->foo()); +var_dump($a === (new B())->foo()); +$c = new C(); +var_dump($a === $c->foo()); +var_dump($a === (new \ReflectionMethod(A::class, 'foo'))->invoke($c)); +var_dump($a === (new D())->foo()); + +?> +--EXPECT-- +string(1) "A" +string(1) "A" +bool(true) +string(1) "A" +bool(true) +string(1) "C" +bool(false) +string(1) "A" +bool(true) +string(1) "D" +bool(false)