龙空技术网

18 PHP 设计模式系列 「流接口模式(Fluent Interface)」

php技术社区 47

前言:

如今我们对“十八哥php”可能比较着重,兄弟们都想要剖析一些“十八哥php”的相关资讯。那么小编在网上收集了一些对于“十八哥php””的相关内容,希望咱们能喜欢,小伙伴们快快来学习一下吧!

1、模式定义

在软件工程中,流接口(Fluent Interface)是指实现一种面向对象的、能提高代码可读性的 API 的方法,其目的就是可以编写具有自然语言一样可读性的代码,我们对这种代码编写方式还有一个通俗的称呼 —— 方法链。

Laravel 中流接口模式有着广泛使用,比如查询构建器,邮件等等。

2、UML 类图3、示例代码

Sql.php

<?phpnamespace DesignPatterns\Structural\FluentInterface;/** * SQL 类 */class Sql{ /** * @var array */ protected $fields = array(); /** * @var array */ protected $from = array(); /** * @var array */ protected $where = array(); /** * 添加 select 字段 * * @param array $fields * * @return SQL */ public function select(array $fields = array()) { $this->fields = $fields; return $this; } /** * 添加 FROM 子句 * * @param string $table * @param string $alias * * @return SQL */ public function from($table, $alias) { $this->from[] = $table . ' AS ' . $alias; return $this; } /** * 添加 WHERE 条件 * * @param string $condition * * @return SQL */ public function where($condition) { $this->where[] = $condition; return $this; } /** * 生成查询语句 * * @return string */ public function getQuery() { return 'SELECT ' . implode(',', $this->fields) . ' FROM ' . implode(',', $this->from) . ' WHERE ' . implode(' AND ', $this->where); }}
4、测试代码

Tests/FluentInterfaceTest.php

<?phpnamespace DesignPatterns\Structural\FluentInterface\Tests;use DesignPatterns\Structural\FluentInterface\Sql;/** * FluentInterfaceTest 测试流接口SQL */class FluentInterfaceTest extends \PHPUnit_Framework_TestCase{ public function testBuildSQL() { $instance = new Sql(); $query = $instance->select(array('foo', 'bar')) ->from('foobar', 'f') ->where('f.bar = ?') ->getQuery(); $this->assertEquals('SELECT foo,bar FROM foobar AS f WHERE f.bar = ?', $query); }}

标签: #十八哥php #php的interface