亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 21
粉絲 0
評論 0
訪問量 29626
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
命名空間分級和別名引用,以及trait類的使用-------2019.10.10
刂艸亻的博客
原創(chuàng)
1027人瀏覽過

接口常量的設置和調用

實例

<?php
namespace _1010;
//接口常量,通常用作配置文件
//如果這個接口沒定義定義,就定義該接口(要加上命名空間)
if(!interface_exists(__NAMESPACE__.'\iDbParam')){
    interface iDbParam
    {
        //數(shù)據庫連接參數(shù)常量
        const TYPE = 'mysql';
        const HOST = '127.0.0.1';
        const DBNAME = 'chen';
        const USER = 'root';
        const PSWD = 'root';

        //抽象方法
        public static function connection();
    }
}


//工作類/普通類:用來實現(xiàn)接口  在同一空間下 ,可以不加空間名
class Connection implements namespace\iDbParam
{
    //初始化連接參數(shù),直接調用接口中的常量
    private static $type = iDbParam::TYPE;
    private static $host = iDbParam::HOST;
    private static $dbname = iDbParam::DBNAME;
    private static $user = iDbParam::USER;
    private static $pswd = iDbParam::PSWD;

    //實現(xiàn)接口中的方法
    public static function connection()
    {
        // TODO: Implement connection() method.
        //拼接dsn數(shù)據庫連接語句
        $dsn = Connection::$type.':host='.Connection::$host.';dbname='.Connection::$dbname;
        $user = Connection::$user;
        $pswd = Connection::$pswd;
//        實例話pdo對象
        return new \PDO($dsn,$user,$pswd);
    }

}
//連接數(shù)據庫
$link = Connection::connection();
//預處理語句
$stmt = $link->prepare('SELECT * FROM `staff` LIMIT :limit');

//綁定參數(shù)
$stmt->bindValue('limit',5,\PDO::PARAM_INT);
//執(zhí)行查詢操作
$stmt->execute();
foreach($stmt->fetchAll(\PDO::FETCH_ASSOC) as $staff){
    $hiredate=date('Y年m月d日',$staff['hiredate']);
    echo "<li>{$staff['staff_id']}-{$staff['name']}-{$staff['position']}-{$hiredate}</li>";
}

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例

后期靜態(tài)綁定的使用

self關鍵字在解析的時候會先解析成當前的類名(在A類中定義的時候,就會解析成A的類名)
static關鍵字會解析成為當前調用的類名,
self是誰的就解析成誰,static誰調用就解析成誰

實例

<?php
//后期靜態(tài)綁定:延時靜態(tài)綁定
//用在靜態(tài)繼承的上下文環(huán)境中
namespace _1010;
class A
{
    public static function who()
    {
        echo __CLASS__;
    }

    public static function where()
    {
//        self::who();
        static::who();
    }
}

//靜態(tài)繼承的上下文
class B extends A
{
    //在子類重寫父類A中的靜態(tài)方法who()
    public static function who()
    {
        echo __CLASS__;
    }

}
//當父類使用self關鍵字的時候,輸出的都是父類A的空間+類名
//A::where();//_1010\A
//echo '<hr>';
//B::where();//_1010\A
//echo '<hr>';

//當父類使用static關鍵字的時候,A類調用的輸出A類的空間+類名
//當父類使用static關鍵字的時候,B類調用的輸出B類的空間+類名

A::where();//_1010\A
echo '<hr>';
B::where();//_1010\B
echo '<hr>';

//原因分析
//self關鍵字在解析的時候會先解析成當前的類名(在A類中定義的時候,就會解析成A的類名)
//static關鍵字會解析成為當前調用的類名,
//self是誰的就解析成誰,static誰調用就解析成誰

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例


命名空間的分級和別名引用

實例

<?php

//命名空間的分級管理
namespace _1010;
//echo __NAMESPACE__,'<br>';//_1010 當前的空間名稱
//
//class Dog{}
//echo Dog::class,'<br>';//_1010\Dog
//
//namespace _1010\one;
//class Dog{}
//echo Dog::class,'<br>';//_1010\one\Dog
//
//namespace _1010\one\two;
//class Dog{}
//echo Dog::class,'<br>';//_1010\one\two\Dog


//命名空間的別名引用
namespace _1010\one\two\three;
class Test1
{
    public static function demo()
    {
        return __METHOD__;
    }
}

class Test2
{
    public static function demo()
    {
        return __METHOD__;
    }
}

namespace _1010_a;
use _1010\one\two\three\Test1 as T1;
use _1010\one\two\three\Test1;
//如果引入的時候加了別名,就使用別名調用
echo T1::class,'<br>';//_1010\one\two\three\Test1
echo T1::demo(),'<br>';//_1010\one\two\three\Test1::demo

use  _1010\one\two\three\Test2;
use red\Test;
//如果引入的時候,沒有寫別名,就使用類名調用
echo Test2::class,'<br>';//_1010\one\two\three\Test2
echo Test2::demo(),'<br>';//_1010\one\two\three\Test2::demo

// use
// 默認從全局開始, 可以省略掉: \
// as 給當前的空間名稱起一個別名
// 防止當前空間名稱命名沖突

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例

延時靜態(tài)綁定和trait類的綜合使用-----數(shù)據庫的curd操作

實例

<?php
namespace _1010;
//引入全局空間下的PDO類
use PDO;
//
//interface iDbParams
//{
//    const DSN = 'mysql:dbname=chen';
//    const USER = 'root';
//    const PASS = 'root';
//}
////如果接口中沒有定義抽象方法,也可不實現(xiàn)該接口,直接調用接口中的常量
//$pdo = new PDO(iDbParams::DSN, iDbParams::USER, iDbParams::PASS);
//$sql = 'SELECT * 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();
//echo'<pre>';
//print_r($stmt->fetchAll());

//trait類的定義與使用,組件化調用,便于擴展功能

//基礎組件
trait BasicComponent
{
    //本類對象
    protected static $execute = null;
    // 表明
    public $table = null;

    // /字段
    public $field = '*';

    // /條件
    public $where = null;

    // 數(shù)量
    public $limit = null;

    //修改的數(shù)據
    public $value = null;

    //設置數(shù)據表名稱
    protected static function table($tableName)
    {
        static::$execute->table = $tableName;
        //返回當前類實例, 用來鏈式調用后面的其它方法
        return static::$execute;
    }

    public function field($fields = '*')
    {
        //如果沒傳字段名,就默認查所有的
        static::$execute->field = empty($fields) ? '*': $fields ;
        //返回當前類實例, 用來鏈式調用后面的其它方法
        return static::$execute;
    }
    public function where($where = '')
    {
        //如果沒傳條件,就默認為空
        static::$execute->where = empty($where) ? $where : ' WHERE '.$where ;
        //返回當前類實例, 用來鏈式調用后面的其它方法
        return static::$execute;
    }

    public function limit($limit)
    {
        //如果沒傳數(shù)量條件,就默認為空
        static::$execute->limit = empty($limit) ? $limit : ' limit '.$limit ;
        //返回當前類實例, 用來鏈式調用后面的其它方法
        return static::$execute;
    }

    public function value($data)
    {
        //如果沒傳要修改的條件,就默認為空
        static::$execute->value = empty($data) ? die('請輸入要修改的參數(shù)') : $data ;
        //返回當前類實例, 用來鏈式調用后面的其它方法
        return static::$execute;
    }
}
//查詢組件
trait Select
{
    //查詢方法
    public function select()
    {
        //拼裝SQL
        $sql = 'SELECT '
            . $this->field // 字段列表
            . ' FROM '
            . $this->table  // 數(shù)據表
            . $this->where  // 條件
            . $this->limit;  // 顯示數(shù)量
        //預處理
        $stmt = static::$pdo->prepare($sql);
//        var_dump($stmt);die;
        $stmt->execute();
        //返回查詢結果
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}
//新增組件
trait Insert
{
    public function insert()
    {
        //取出要添加的數(shù)據(數(shù)組)中的下標,然后組成數(shù)組
        $keyArr = array_keys($this->value);
        //循環(huán)遍歷數(shù)組
        $fields = '';
        foreach ($keyArr as $value) {
            $fields .= $value . ', ';
        }
        //去掉最后一個逗號
        $fields = rtrim($fields, ', ');

        $value = '';
        foreach ($keyArr as $v) {
            $value .= ':'.$v . ', ';
        }
        //去掉最后一個逗號
        $value = rtrim($value, ', ');
        //組裝sql語句
        $sql ='INSERT INTO ' .$this->table .' ('.$fields .')'. ' VALUES '.'('. $value .')'.$this->where;
//        var_dump($sql);die;

        //預處語句
        $stmt = static::$pdo->prepare($sql);
//                var_dump($stmt);die;

        //執(zhí)行
        $stmt->execute($this->value);
        //返回受影響的那一行
        return [
            'count' => $stmt->rowCount(),
            'id' => static::$pdo->lastInsertId()
        ];
    }
}
//修改組件
trait Update
{
    public function update()
    {
//        UPDATE 表名 set 要修改的參數(shù) where 條件
        //取出要修改的數(shù)據(數(shù)組)中的下標,然后組成數(shù)組
        $keyArr = array_keys($this->value);
        //循環(huán)遍歷數(shù)組
        $set = '';
        foreach ($keyArr as $value) {
            $set .= $value . ' = :' . $value. ', ';
        }
        //去掉最后一個逗號
        $set = rtrim($set, ', ');
        //組裝sql語句
        $sql ='UPDATE ' .$this->table . ' SET '. $set .$this->where;

        //預處語句
        $stmt = static::$pdo->prepare($sql);
//                var_dump($stmt);die;

        //執(zhí)行
        $stmt->execute($this->value);
        //返回受影響的那一行
        return $stmt->rowCount();
    }
}
//刪除組件
trait Delete
{
    // 刪除數(shù)據
    public function delete()
    {
        $sql = 'DELETE FROM ' .$this->table .$this->where;
        $stmt = static::$pdo->prepare($sql);
//        var_dump($stmt);die;
        $stmt->execute();

        return $stmt->rowCount();
    }
}
//數(shù)據庫組件
trait DBname
{
    //連接數(shù)據庫的參數(shù),獨立出來便于更改
    public static $dsn = 'mysql:host=127.0.0.1;dbname=chen';
    public static $usernam = 'root';
    public static $password = 'root';
    //數(shù)據庫的連接方式
    public static function connection()
    {
        // 連接數(shù)據庫
        static::$pdo= new PDO(self::$dsn,self::$usernam,self::$password);
        self::$execute = new self();
    }
}
//工作類
class Execute
{
    use DBname;
    use BasicComponent;
    use Select;
    use Insert;
    use Update;
    use Delete;
    //pdo類對象
    protected static $pdo = null;

    public static function __callStatic($name, $arguments)
    {
        // TODO: Implement __callStatic() method.
//        if(!is_object(static::$pdo)&& !is_object(static::$execute)){
            static::connection();
//        }
//        return call_user_func_array([self::$execute,$name],$arguments);
        return call_user_func_array([new Execute(),$name],$arguments);
    }

}
$staffs = Execute::table('staff')
    ->field('staff_id,name,position,mobile')
    ->where('staff_id > 2')
    ->limit(5)
    ->select();
foreach ($staffs as $staff) {
    print_r($staff); echo '<br>';
}
echo'<hr>';
$data = [
    'name' => '作者',
    'position' => '作死的存在'
];
//修改
//$staffs2 = Execute::table('staff')
//    ->value($data)
//    ->where('staff_id = 17')
//    ->update();
//print_r($staffs2);
echo'<hr>';

//添加
//$data2 = [
//    'name' => '郭靖',
//    'age' => 29,
//    'sex' => 1,
//    'position' => '金刀駙馬',
//    'mobile' => '1389998899',
//    'hiredate' => time()
//];
//$staffs3 = Execute::table('staff')
//    ->value($data2)
//    ->insert();
//print_r($staffs3);
//刪除
//$staffs4 = Execute::table('staff')
//    ->where('staff_id =17')
//    ->delete();
//print_r($staffs4);

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例


批改狀態(tài):合格

老師批語:努力 , 一定會成功
本博文版權歸博主所有,轉載請注明地址!如有侵權、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網理性發(fā)言,請遵守新聞評論服務協(xié)議
0條評論
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網:公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網訂閱號
每天精選資源文章推送
PHP中文網APP
隨時隨地碎片化學習
PHP中文網抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網,和優(yōu)秀的人一起學習!
    全站2000+教程免費學