博客列表 >命名空间和trait类使用-2019-10-11

命名空间和trait类使用-2019-10-11

H先生
H先生原创
2019年10月11日 19:48:58788浏览


    1. 写一个分级的命名空间, 并实现类的自动加载


0.png






实例

<?php


namespace _1010;

use PDO as p;

interface iDbParams
{
    const DSN = 'mysql:dbname=php';
    const USER = 'root';
    const PASS = 'root';

}

$pdo = new P(iDbParams::DSN, iDbParams::USER, iDbParams::PASS);
var_dump($pdo);

$sql = 'SELECT `staff_id`,`name`,`position`  FROM `staff` LIMIT :num OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindValue('num',5,\PDO::PARAM_INT);
$stmt->bindValue('offset',0,\PDO::PARAM_INT);
$stmt->execute();

foreach ($stmt->fetchAll() as $staff){
    echo "<p>{$staff['staff_id']} -- {$staff['name']} -- {$staff['position']}</p>";
}

exit;

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例





    2. 写一个trait类, 理解它的功能与使用场景

  




0.png








实例

<?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);

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

























































声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议