]> granicus.if.org Git - php/commitdiff
Allow arbitrary expressions in new/instanceof using () syntax
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 6 Jan 2020 15:22:17 +0000 (16:22 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Feb 2020 11:33:23 +0000 (12:33 +0100)
Zend/tests/varSyntax/new_instanceof_expr.phpt [new file with mode: 0644]
Zend/zend_language_parser.y

diff --git a/Zend/tests/varSyntax/new_instanceof_expr.phpt b/Zend/tests/varSyntax/new_instanceof_expr.phpt
new file mode 100644 (file)
index 0000000..475f7a9
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+new with an arbitrary expression
+--FILE--
+<?php
+
+$class = 'class';
+var_dump(new ('std'.$class));
+var_dump(new ('std'.$class)());
+$obj = new stdClass;
+var_dump($obj instanceof ('std'.$class));
+
+?>
+--EXPECT--
+object(stdClass)#1 (0) {
+}
+object(stdClass)#1 (0) {
+}
+bool(true)
index af8b67af5c2b3bdde7afc50ba89cb4cef8a2c8b4..02dbd091dcf89858a95254d3a489e4b09a1dd3bc 100644 (file)
@@ -1078,6 +1078,7 @@ class_name:
 class_name_reference:
                class_name              { $$ = $1; }
        |       new_variable    { $$ = $1; }
+       |       '(' expr ')'    { $$ = $2; }
 ;
 
 exit_expr: