mwayi/expression

一个多功能的PHP条件解析器。

0.1.0 2016-11-08 19:19 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:53:22 UTC


README

status

一个多功能的表达式解析器。

表达式解析器允许开发者传入一个纯文本语句,该语句可以被解析为以下之一:

  • 一个可迭代条件对象
  • 一个布尔(true或false)语句
  • 一个MySql PDO对象

以下是一个示例用例

$expression = new \Smrtr\Expression('a = b');
$conditions = $expression->execute()->toArray();
print_r($conditions);

将会解析为

Array
(
	[0] => Smrtr\Expression\Condition Object
		(
			[attributes:protected] => Array
				(
					[key] => a
					[value] => b
					[original_value] => b
					[operator] => =
				)

		)

)

现在你可以使用回调递归迭代该对象

$result = $expression->solve(function($condition) {

	return $this->myCustomAssertionEngine(
		$condition->key,
		$condition->operator, 
		$condition->value
	);

});

其中 $this->myCustomAssertionEngine 会被构建来识别键和操作符。处理器将包含基于提供的值返回falsey和truthy结果的逻辑。

protected function myCustomAssertionEngine($key, $operator, $value) 
{
	$handler = 'handle' . ucfirst($key) . 'Key'; 

	if(method_exists($handler, $this)) {
		return $this->{$handler}($operator, $value);
	}

	return false;
}

结果将是一个布尔值。

var_dump($result); // bool(true) or bool(false)

定义

条件元素

条件由一个键和一个值组成,它们通过操作符(例如=)连接,返回true或false。

[key] [operator] [value]
  a        =        b

复合条件

复合条件结合了两个或更多通过逻辑操作符(例如,AND)连接的条件,返回true或false。

a = b AND c = d

嵌套条件

嵌套条件使用括号来分组包含在其他条件中的条件,并使用AND和OR连接。

a = b AND (c = d OR e = f)

逻辑运算符

逻辑运算符将两个条件组合在一起以返回一组结果

AND 
OR

待办事项

  • 允许条件元素 valuekey 被扩展。
  • 将创建表达式对象的责任传递给表达式接口。

测试

php vendor/bin/phpunit