final public static binaryOperation ( |
||
$leftOperand | ||
$operator | string | |
$rightOperand | ||
리턴 |
public function testParameterCollectionCanEvaluateAlteredParameterVariableExpressions() { $this->collection->addExpression(O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('var-foo')), O\Operators\Binary::CONCATENATION, O\Expression::value('--concat')), ParameterHasher::valueType(), new Functions\ElementProjection('', null, null, ['param' => 'var-foo'], [], [])); $this->assertResolvesTo(['abcde--concat'], ['param' => 'abcde']); $this->assertResolvesTo(['1--concat'], ['param' => 1]); $this->assertResolvesTo(['--concat'], ['param' => null]); }
/** * Converts the assignment expression with compound assignment operators * to the equivalent assignment and binary operator combination * * <code> * $variable += 5 * </code> * becomes * <code> * $variable = $variable + 5 * </code> * * @return AssignmentExpression */ public function toBinaryOperationEquivalent() { $binaryOperator = Assignment::toBinaryOperator($this->operator); if ($binaryOperator === null) { return $this; } return $this->update($this->assignTo, Assignment::EQUAL, Expression::binaryOperation($this->assignTo, $binaryOperator, $this->assignmentValue)); }
public function walkVariable(VariableExpression $expression) { $name = $expression->getName(); if ($name instanceof O\ValueExpression) { return $expression->update(O\Expression::value($this->prefix . $name->getValue())); } return $expression->update(O\Expression::binaryOperation(O\Expression::value($this->prefix), O\Operators\Binary::CONCATENATION, $name)); }
public function testAssignmentToBinaryOperatorEquivalent() { foreach ([O\Operators\Assignment::EQUAL, O\Operators\Assignment::EQUAL_REFERENCE] as $operatorThatShouldNotChange) { $assignment = O\Expression::assign(O\Expression::variable(O\Expression::value('foo')), $operatorThatShouldNotChange, O\Expression::variable(O\Expression::value('bar'))); $this->assertSame($assignment, $assignment->toBinaryOperationEquivalent()); } $assignment = O\Expression::assign(O\Expression::variable(O\Expression::value('foo')), O\Operators\Assignment::ADDITION, O\Expression::variable(O\Expression::value('bar'))); $this->assertEquals(O\Expression::assign(O\Expression::variable(O\Expression::value('foo')), O\Operators\Assignment::EQUAL, O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('foo')), O\Operators\Binary::ADDITION, O\Expression::variable(O\Expression::value('bar')))), $assignment->toBinaryOperationEquivalent()); }
private function parseOperatorNode(Node\Expr $node) { $nodeType = str_replace('Expr_', '', $node->getType()); switch (true) { case isset(self::$assignOperatorsMap[$nodeType]): return Expression::assign($this->parseNode($node->var), self::$assignOperatorsMap[$nodeType], $this->parseNode($node->expr)); case $node instanceof Node\Expr\Instanceof_: return Expression::binaryOperation($this->parseNode($node->expr), Operators\Binary::IS_INSTANCE_OF, $this->parseNameNode($node->class)); case isset(self::$binaryOperatorsMap[$nodeType]): return Expression::binaryOperation($this->parseNode($node->left), self::$binaryOperatorsMap[$nodeType], $this->parseNode($node->right)); case isset(self::$unaryOperatorsMap[$nodeType]): return Expression::unaryOperation(self::$unaryOperatorsMap[$nodeType], $this->parseNode(isset($node->expr) ? $node->expr : $node->var)); case isset(self::$castOperatorMap[$nodeType]): return Expression::cast(self::$castOperatorMap[$nodeType], $this->parseNode($node->expr)); default: return null; } }
/** * @dataProvider parsers */ public function testBinaryOperator() { $this->assertParsedAs([PowerOperators::TYPE, 'binaryOperator'], [O\Expression::binaryOperation(O\Expression::value(4), O\Operators\Binary::POWER, O\Expression::value(5))]); }
public function expressions() { return [[O\Expression::arrayExpression([])], [O\Expression::arrayItem(null, O\Expression::value(0), false)], [O\Expression::assign(O\Expression::value(0), O\Operators\Assignment::EQUAL, O\Expression::value(0))], [O\Expression::binaryOperation(O\Expression::value(0), O\Operators\Binary::ADDITION, O\Expression::value(0))], [O\Expression::unaryOperation(O\Operators\Unary::PLUS, O\Expression::value(0))], [O\Expression::cast(O\Operators\Cast::STRING, O\Expression::value(0))], [O\Expression::closure(false, false, [], [], [])], [O\Expression::closureUsedVariable('var')], [O\Expression::emptyExpression(O\Expression::value(0))], [O\Expression::field(O\Expression::value(0), O\Expression::value(0))], [O\Expression::functionCall(O\Expression::value(0))], [O\Expression::index(O\Expression::value(0), O\Expression::value(0))], [O\Expression::invocation(O\Expression::value(0))], [O\Expression::issetExpression([O\Expression::value(0)])], [O\Expression::unsetExpression([O\Expression::value(0)])], [O\Expression::methodCall(O\Expression::value(0), O\Expression::value(0))], [O\Expression::newExpression(O\Expression::value(0))], [O\Expression::parameter('')], [O\Expression::argument(O\Expression::value(0))], [O\Expression::returnExpression()], [O\Expression::staticMethodCall(O\Expression::value(0), O\Expression::value(0))], [O\Expression::staticField(O\Expression::value(0), O\Expression::value(0))], [O\Expression::ternary(O\Expression::value(0), null, O\Expression::value(0))], [O\Expression::throwExpression(O\Expression::value(0))], [O\Expression::value(0)], [O\Expression::variable(O\Expression::value(0))], [O\Expression::constant('foo')], [O\Expression::classConstant(O\Expression::value(0), 'foo')]]; }
/** * @dataProvider parsers */ public function testInstanceOfBinaryOperation() { $this->assertParsedAs(function () { $this instanceof \stdClass; }, [O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('this')), O\Operators\Binary::IS_INSTANCE_OF, O\Expression::value('\\stdClass'))]); $this->assertParsedAs(function () { $this instanceof $bar; }, [O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('this')), O\Operators\Binary::IS_INSTANCE_OF, O\Expression::variable(O\Expression::value('bar')))]); }
/** * @dataProvider parsers */ public function testThatChainedMethodCalls() { $this->assertReturn(function (\Pinq\ITraversable $traversable) { return $traversable->asArray(); }, O\Expression::methodCall(O\Expression::variable(O\Expression::value('traversable')), O\Expression::value('asArray'))); $this->assertReturn(function (\Pinq\ITraversable $traversable) { return $traversable->where(function ($i) { return $i > 0; })->all(function ($i) { return $i % 2 === 0; }); }, O\Expression::methodCall(O\Expression::methodCall(O\Expression::variable(O\Expression::value('traversable')), O\Expression::value('where'), [O\Expression::argument(O\Expression::closure(false, false, [O\Expression::parameter('i')], [], [O\Expression::returnExpression(O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('i')), O\Operators\Binary::GREATER_THAN, O\Expression::value(0)))]))]), O\Expression::value('all'), [O\Expression::argument(O\Expression::closure(false, false, [O\Expression::parameter('i')], [], [O\Expression::returnExpression(O\Expression::binaryOperation(O\Expression::binaryOperation(O\Expression::variable(O\Expression::value('i')), O\Operators\Binary::MODULUS, O\Expression::value(2)), O\Operators\Binary::IDENTITY, O\Expression::value(0)))]))])); }
protected function exampleFromDocsQuery() { $rowExpression = O\Expression::variable(O\Expression::value('row')); return $this->scopeRequest([new Q\Segments\Filter(new Q\Functions\ElementProjection($this->parameter(), self::SCOPE_TYPE, self::SCOPE_NAMESPACE, [$this->parameter() => 'this'], [O\Expression::parameter('row')], [O\Expression::returnExpression(O\Expression::binaryOperation(O\Expression::index($rowExpression, O\Expression::value('age')), O\Operators\Binary::LESS_THAN_OR_EQUAL_TO, O\Expression::value(50)))])), new Q\Segments\OrderBy([new Q\Segments\Ordering($this->indexProjection('firstName'), $this->parameter()), new Q\Segments\Ordering($this->indexProjection('lastName'), $this->parameter())]), new Q\Segments\Range($this->parameter(), $this->parameter()), new Q\Segments\IndexBy($this->indexProjection('phoneNumber')), new Q\Segments\Select(new Q\Functions\ElementProjection($this->parameter(), self::SCOPE_TYPE, self::SCOPE_NAMESPACE, [$this->parameter() => 'this'], [O\Expression::parameter('row')], [O\Expression::returnExpression(O\Expression::arrayExpression([O\Expression::arrayItem(O\Expression::value('fullName'), O\Expression::binaryOperation(O\Expression::binaryOperation(O\Expression::index($rowExpression, O\Expression::value('firstName')), O\Operators\Binary::CONCATENATION, O\Expression::value(' ')), O\Operators\Binary::CONCATENATION, O\Expression::index($rowExpression, O\Expression::value('lastName')))), O\Expression::arrayItem(O\Expression::value('address'), O\Expression::index($rowExpression, O\Expression::value('address'))), O\Expression::arrayItem(O\Expression::value('dateOfBirth'), O\Expression::index($rowExpression, O\Expression::value('dateOfBirth')))]))]))]); }