diff --git a/src/Fenom/Template.php b/src/Fenom/Template.php index a2aca54..1682522 100644 --- a/src/Fenom/Template.php +++ b/src/Fenom/Template.php @@ -724,16 +724,21 @@ class Template extends Render break; } } elseif ($tokens->is('~')) { // string concatenation operator: 'asd' ~ $var - $concat = array(array_pop($exp)); - while ($tokens->is('~')) { - $tokens->next(); - if ($tokens->is(T_LNUMBER, T_DNUMBER)) { - $concat[] = "strval(" . $this->parseTerm($tokens) . ")"; - } else { - $concat[] = $this->parseTerm($tokens); + if($tokens->isNext('=')) { // ~= + $exp[] = ".="; + $tokens->next()->next(); + } else { + $concat = array(array_pop($exp)); + while ($tokens->is('~')) { + $tokens->next(); + if ($tokens->is(T_LNUMBER, T_DNUMBER)) { + $concat[] = "strval(" . $this->parseTerm($tokens) . ")"; + } else { + $concat[] = $this->parseTerm($tokens); + } } + $exp[] = "(" . implode(".", $concat) . ")"; } - $exp[] = "(" . implode(".", $concat) . ")"; } else { break; } diff --git a/tests/cases/Fenom/TemplateTest.php b/tests/cases/Fenom/TemplateTest.php index b9ff1d2..36500b5 100644 --- a/tests/cases/Fenom/TemplateTest.php +++ b/tests/cases/Fenom/TemplateTest.php @@ -1170,6 +1170,7 @@ class TemplateTest extends TestCase array('{"string" ~ ++$one ~ "end"}', "string2end"), array('{"string" ~ "one" ~ "end"}', "stringoneend"), array('{"string" ~ 1 ~ "end"}', "string1end"), + array('{$one ~= "string"} is {$one}', "1string is 1string"), ); } @@ -1536,6 +1537,7 @@ class TemplateTest extends TestCase /** * @dataProvider providerConcat + * @group testConcat */ public function testConcat($code, $result) {