protected function evaluateOperator($value, $operator, $operand)
{
switch ($operator) {
case '=':
return $value === $operand;
case '!=':
return $value !== $operand;
case '<':
return $value < $operand;
case '<=':
return $value <= $operand;
case '>':
return $value > $operand;
case '>=':
return $value >= $operand;
case '$=':
return strrpos($value, $operand) === strlen($value) - strlen($operand);
case '^=':
return strpos($value, $operand) === 0;
case '*=':
return strpos($value, $operand) !== false;
case 'instanceof':
if ($this->operandIsSimpleType($operand)) {
return $this->handleSimpleTypeOperand($operand, $value);
} else {
return $value instanceof $operand;
}
case '!instanceof':
if ($this->operandIsSimpleType($operand)) {
return !$this->handleSimpleTypeOperand($operand, $value);
} else {
return !$value instanceof $operand;
}
default:
return $value !== null;
}
}
/** * {@inheritdoc} * * @param mixed $value * @param string $operator * @param mixed $operand * @return boolean */ protected function evaluateOperator($value, $operator, $operand) { if ($operator === 'instanceof' && $value instanceof NodeInterface) { if ($this->operandIsSimpleType($operand)) { return $this->handleSimpleTypeOperand($operand, $value); } elseif ($operand === NodeInterface::class || $operand === Node::class) { return true; } else { $isOfType = $value->getNodeType()->isOfType($operand[0] === '!' ? substr($operand, 1) : $operand); return $operand[0] === '!' ? $isOfType === false : $isOfType; } } elseif ($operator === '!instanceof' && $value instanceof NodeInterface) { return !$this->evaluateOperator($value, 'instanceof', $operand); } return parent::evaluateOperator($value, $operator, $operand); }