summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/varSyntax/encapsed_string_deref.phpt29
-rw-r--r--Zend/zend_language_parser.y2
2 files changed, 30 insertions, 1 deletions
diff --git a/Zend/tests/varSyntax/encapsed_string_deref.phpt b/Zend/tests/varSyntax/encapsed_string_deref.phpt
new file mode 100644
index 0000000000..e880f0f1ff
--- /dev/null
+++ b/Zend/tests/varSyntax/encapsed_string_deref.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Dereferencing operations on an encapsed string
+--FILE--
+<?php
+
+$bar = "bar";
+var_dump("foo$bar"[0]);
+var_dump("foo$bar"->prop);
+try {
+ var_dump("foo$bar"->method());
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
+class FooBar { public static $prop = 42; }
+var_dump("foo$bar"::$prop);
+
+function foobar() { return 42; }
+var_dump("foo$bar"());
+
+?>
+--EXPECTF--
+string(1) "f"
+
+Warning: Trying to get property 'prop' of non-object in %s on line %d
+NULL
+Call to a member function method() on string
+int(42)
+int(42)
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 078c863c4e..22e0ebfa58 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -1102,6 +1102,7 @@ dereferencable_scalar:
T_ARRAY '(' array_pair_list ')' { $$ = $3; $$->attr = ZEND_ARRAY_SYNTAX_LONG; }
| '[' array_pair_list ']' { $$ = $2; $$->attr = ZEND_ARRAY_SYNTAX_SHORT; }
| T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
+ | '"' encaps_list '"' { $$ = $2; }
;
scalar:
@@ -1118,7 +1119,6 @@ scalar:
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; }
| T_START_HEREDOC T_END_HEREDOC
{ $$ = zend_ast_create_zval_from_str(ZSTR_EMPTY_ALLOC()); }
- | '"' encaps_list '"' { $$ = $2; }
| T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; }
| dereferencable_scalar { $$ = $1; }
| constant { $$ = $1; }