summaryrefslogtreecommitdiff
path: root/Zend/tests/attributes/013_class_scope.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests/attributes/013_class_scope.phpt')
-rw-r--r--Zend/tests/attributes/013_class_scope.phpt117
1 files changed, 117 insertions, 0 deletions
diff --git a/Zend/tests/attributes/013_class_scope.phpt b/Zend/tests/attributes/013_class_scope.phpt
new file mode 100644
index 0000000000..3bb2b303ba
--- /dev/null
+++ b/Zend/tests/attributes/013_class_scope.phpt
@@ -0,0 +1,117 @@
+--TEST--
+Attributes make use of class scope.
+--FILE--
+<?php
+
+<<A1(self::class, self::FOO)>>
+class C1
+{
+ <<A1(self::class, self::FOO)>>
+ private const FOO = 'foo';
+
+ <<A1(self::class, self::FOO)>>
+ public $a;
+
+ <<A1(self::class, self::FOO)>>
+ public function bar(<<A1(self::class, self::FOO)>> $p) { }
+}
+
+$ref = new \ReflectionClass(C1::class);
+print_r($ref->getAttributes()[0]->getArguments());
+print_r($ref->getReflectionConstant('FOO')->getAttributes()[0]->getArguments());
+print_r($ref->getProperty('a')->getAttributes()[0]->getArguments());
+print_r($ref->getMethod('bar')->getAttributes()[0]->getArguments());
+print_r($ref->getMethod('bar')->getParameters()[0]->getAttributes()[0]->getArguments());
+
+echo "\n";
+
+trait T1
+{
+ <<A1(self::class, self::FOO)>>
+ public function foo() { }
+}
+
+class C2
+{
+ use T1;
+
+ private const FOO = 'bar';
+}
+
+$ref = new \ReflectionClass(C2::class);
+print_r($ref->getMethod('foo')->getAttributes()[0]->getArguments());
+
+$ref = new \ReflectionClass(T1::class);
+$attr = $ref->getMethod('foo')->getAttributes()[0];
+
+try {
+ $attr->getArguments();
+} catch (\Error $e) {
+ var_dump('ERROR 1', $e->getMessage());
+}
+
+echo "\n";
+
+class C3
+{
+ private const FOO = 'foo';
+
+ public static function foo()
+ {
+ return new <<A1(self::class, self::FOO)>> class() {
+ private const FOO = 'bar';
+
+ <<A1(self::class, self::FOO)>>
+ public function bar() { }
+ };
+ }
+}
+
+$ref = new \ReflectionObject(C3::foo());
+
+$args = $ref->getAttributes()[0]->getArguments();
+var_dump($args[0] == $ref->getName(), $args[1]);
+
+$args = $ref->getMethod('bar')->getAttributes()[0]->getArguments();
+var_dump($args[0] == $ref->getName(), $args[1]);
+
+?>
+--EXPECT--
+Array
+(
+ [0] => C1
+ [1] => foo
+)
+Array
+(
+ [0] => C1
+ [1] => foo
+)
+Array
+(
+ [0] => C1
+ [1] => foo
+)
+Array
+(
+ [0] => C1
+ [1] => foo
+)
+Array
+(
+ [0] => C1
+ [1] => foo
+)
+
+Array
+(
+ [0] => C2
+ [1] => bar
+)
+string(7) "ERROR 1"
+string(36) "Undefined class constant 'self::FOO'"
+
+bool(true)
+string(3) "bar"
+bool(true)
+string(3) "bar"