# Complex: Variable access Template( TextInterpolation(PhpOpen), ExpressionStatement( String(Interpolation(VariableName)) ) ) # Complex: Disallow space between { and $ Template( TextInterpolation(PhpOpen), ExpressionStatement( String(VariableName) ) ) # Complex: PHP documentation tests width}00 centimeters broad."; // Works, quoted keys only work using the curly brace syntax "This works: {$arr['key']}"; "This works: {$arr[4][3]}"; // Works. When using multi-dimensional arrays, always use braces around arrays // when inside of strings "This works: {$arr['foo'][3]}"; "This works: " . $arr['foo'][3]; "This works too: {$obj->values[3]->name}"; "This is the value of the var named $name: {${$name}}"; "This is the value of the var named by the return value of getName(): {${getName()}}"; "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; // Won't work, outputs: This is the return value of getName(): {getName()} "This is the return value of getName(): {getName()}"; "{$foo->$bar}\n"; "{$foo->{$baz[1]}}\n"; "I'd like an {${beers::softdrink}}\n"; "I'd like an {${beers::$ale}}\n"; ==> Template( TextInterpolation(PhpOpen), ExpressionStatement( String(Interpolation(VariableName)) ), ExpressionStatement( String(Interpolation(MemberExpression(VariableName, Name))) ), LineComment, ExpressionStatement( String(Interpolation(SubscriptExpression(VariableName, String)))), ExpressionStatement( String(Interpolation(SubscriptExpression(SubscriptExpression(VariableName,Integer),Integer))) ), LineComment, LineComment, ExpressionStatement( String(Interpolation(SubscriptExpression(SubscriptExpression(VariableName,String),Integer))) ), ExpressionStatement( BinaryExpression( String, ConcatOp, SubscriptExpression(SubscriptExpression(VariableName,String),Integer)) ), ExpressionStatement( String( Interpolation(MemberExpression( SubscriptExpression( MemberExpression( VariableName, Name ), Integer ), Name )) ) ), ExpressionStatement( String( VariableName, Interpolation(DynamicVariable(VariableName)) ) ), ExpressionStatement( String( Interpolation(DynamicVariable(CallExpression(Name,ArgList))) ) ), ExpressionStatement( String( EscapeSequence, Interpolation(DynamicVariable( CallExpression(MemberExpression(VariableName, Name), ArgList) )) ) ), LineComment, ExpressionStatement(String), ExpressionStatement( String( Interpolation(MemberExpression(VariableName,VariableName)), EscapeSequence ) ), ExpressionStatement( String( Interpolation(MemberExpression( VariableName, SubscriptExpression( VariableName, Integer ) )), EscapeSequence ) ), ExpressionStatement( String( Interpolation(DynamicVariable( ScopedExpression( Name, ClassMemberName(Name) ) )), EscapeSequence ) ), ExpressionStatement( String( Interpolation(DynamicVariable( ScopedExpression( Name, ClassMemberName(VariableName) ) )), EscapeSequence ) ) ) # Simple: Variable access Template( TextInterpolation(PhpOpen), ExpressionStatement( String(VariableName) ), ExpressionStatement( String(Interpolation(Name)) ) ) # Simple: Member and array access john drank some $juices[0] juice.".PHP_EOL; "$people->john then said hello to $people?->jane.".PHP_EOL; "$people->john's wife greeted $people->robert."; "The character at index -2 is $string[-2]."; ==> Template( TextInterpolation(PhpOpen), ExpressionStatement( BinaryExpression( String( MemberExpression(VariableName,Name), SubscriptExpression(VariableName,Integer), ), ConcatOp, Name ) ), ExpressionStatement( BinaryExpression( String( MemberExpression(VariableName,Name), MemberExpression(VariableName,Name), ), ConcatOp, Name ) ), ExpressionStatement( String( MemberExpression(VariableName,Name), MemberExpression(VariableName,Name), ) ), ExpressionStatement( String( SubscriptExpression(VariableName,UnaryExpression(ArithOp,Integer)), ) ) ) # Corner cases tester- Hello"; " # x {$var->prop["key:"."key: {$var->func("arg")}"]}# x"; "hello \0 world"; "hello ${"a"."b"} world"; "$$$$$$$$$$$$$a"; "{$$$$$$$$b}"; "\{$"; "\u{$a}"; ==> Template( TextInterpolation(PhpOpen), ExpressionStatement( String ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String(EscapeSequence,EscapeSequence,EscapeSequence) ), ExpressionStatement( String(EscapeSequence,EscapeSequence,VariableName) ), ExpressionStatement( String(VariableName) ), ExpressionStatement( String(VariableName) ), ExpressionStatement( String(VariableName) ), ExpressionStatement( String( Interpolation(CallExpression(ScopedExpression(VariableName,ClassMemberName(Name)), ArgList)) ) ), ExpressionStatement( String(MemberExpression(VariableName,Name)) ), ExpressionStatement( String( Interpolation(SubscriptExpression( MemberExpression(VariableName,Name), BinaryExpression( String, ConcatOp, String(Interpolation(CallExpression(MemberExpression(VariableName,Name),ArgList(String)))) ) )) ) ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String(Interpolation(BinaryExpression(String,ConcatOp,String))) ), ExpressionStatement( String(VariableName) ), ExpressionStatement( String( Interpolation(DynamicVariable( DynamicVariable( DynamicVariable( DynamicVariable( DynamicVariable( DynamicVariable( DynamicVariable( VariableName ) ) ) ) ) ) )) ) ), ExpressionStatement( String(EscapeSequence) ), ExpressionStatement( String(Interpolation(VariableName)) ) ) # Single quoted Template( TextInterpolation(PhpOpen), ExpressionStatement(String), ExpressionStatement(String), ExpressionStatement(String), ExpressionStatement(String), ExpressionStatement(String), ExpressionStatement(String), ExpressionStatement(String) )