]> granicus.if.org Git - php/commitdiff
Make class constants fully dereferencable
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 6 Jan 2020 14:57:47 +0000 (15:57 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Feb 2020 11:33:23 +0000 (12:33 +0100)
Zend/tests/varSyntax/class_constant_static_deref.phpt [new file with mode: 0644]
Zend/zend_language_parser.y

diff --git a/Zend/tests/varSyntax/class_constant_static_deref.phpt b/Zend/tests/varSyntax/class_constant_static_deref.phpt
new file mode 100644 (file)
index 0000000..7585a30
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Class constants can be used as a class name
+--FILE--
+<?php
+
+class Test {
+    const NAME = 'Test2';
+}
+
+class Test2 {
+    const FOO = 42;
+    public static $foo = 42;
+
+    public static function foo() {
+        return 42;
+    }
+}
+
+var_dump(Test::NAME::FOO);
+var_dump(Test::NAME::$foo);
+var_dump(Test::NAME::foo());
+
+?>
+--EXPECT--
+int(42)
+int(42)
+int(42)
index 17c4632922675985190cf0670210139c39f11027..8db53e11d02ae075fafb064f5f3ca5eb4abc9868 100644 (file)
@@ -1150,12 +1150,12 @@ fully_dereferencable:
                variable                                { $$ = $1; }
        |       '(' expr ')'                    { $$ = $2; }
        |       dereferencable_scalar   { $$ = $1; }
+       |       class_constant                  { $$ = $1; }
 ;
 
 array_object_dereferencable:
                fully_dereferencable    { $$ = $1; }
        |       constant                                { $$ = $1; }
-       |       class_constant                  { $$ = $1; }
 ;
 
 callable_expr: