<?php
namespace _1010;
use PDO;
// trait
trait Db
{
// 连接数据库
public function connect($dsn, $username, $password)
{
return new PDO($dsn, $username, $password);
}
}
trait Query
{
public function get(PDO $pdo, $where = '')
{
$where = empty($where) ? '' : ' WHERE ' . $where;
$stmt = $pdo->prepare('SELECT * FROM `staff` '. $where . ' LIMIT 1');
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
// 客户端调用: 工作类
class Client
{
// 在宿主类Client中引入上面声明的二个Trait类/方法库
use Db; // ....
use Query;
public $pdo = null;
public function __construct($dsn, $username, $password)
{
// 调用的是trait: Db中的方法connect()
$this->pdo = $this->connect($dsn, $username, $password);
}
// 调用的是Trait: Query中的方法:get()
public function find($where)
{
return $this->get($this->pdo, $where);
}
}
$dsn = 'mysql:dbname=php';
$username = 'root';
$password = 'root';
$client = new Client($dsn, $username, $password);
echo '<pre>'. print_r($client->find('age < 30'), true);
tarit主要是用来替代多态,因为php中是单继承