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

搜索
博主信息
博文 34
粉絲 1
評論 1
訪問量 47207
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
類的自動加載,接口常量的原理與實現(xiàn),后期靜態(tài)綁定,命名空間分層結構,Trait技術——2019年8月5日22時04分
嘿哈的博客
原創(chuàng)
1023人瀏覽過

類的自動加載

需要用str_replace() 轉換'\'符號

file_exists() 檢測文件是否存在;

要自動加載,需要命名空間與文件路徑一致,再利用轉換語法,將命名空間的名字 ' \ ' 轉換成 ' / '

再用spl_autoload_register(function($className){ } ); 實行自動加載;

文件路徑保存:

QQ圖片20190807135733.png

自動加載代碼實例

<?php

namespace _0805;

//require __DIR__ . '/inc/test/test1.php';
//
//echo \inc\test\test1::get();
//
////echo \inc\test\test2::class;
////$className = ltrim('_',\inc\test\test2::class);
//echo '<hr>';
//
//$path = str_replace('\\','/',\inc\test\test2::class);
//
//$path = __DIR__ . '/'.$path . '.php';
//
//require $path;
//    use inc\test\test2;
//自動加載函數(shù)
class Loader
{
    public static function autoLoader(){
    spl_autoload_register(function ($className){
        $path = str_replace('\\','/',$className);
        $path = __DIR__ . '/'.$path . '.php';
        if (file_exists($path)){
            require $path;
        }
    });
}
}

運行實例 ?

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


自動加載結果演示實例

<?php
namespace _0805;
//導入 自動加載文件
require 'autoload.php';
//調用自動加載函數(shù)
Loader::autoLoader();

//加載inc/test/test1.php的類
echo \inc\test\test1::get();
echo '<br>';

//加載inc/test/test2.php的一級命名空間類
echo \inc\test\test2::get();
echo '<br>';
//訪問二級命名空間類需要先訪問一級命名空間類
//加載inc/test/test2.php的二級命名空間類
echo \inc\test\test2\test2::get();

運行實例 ?

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



接口常量的原理與實現(xiàn)

const定義一個常量;

!function_exists() 檢查函數(shù)是否不存在;

!class_exists() 檢查類當前是否不存在;

!interface_exists() 檢查接口是否不存在;

date() 格式化時間戳 ; date('Y/m/d',$staff['hiredate']);


后期靜態(tài)綁定:

static::函數(shù)名() 使用這個,當子類調用該方法,他就執(zhí)行 子類繼承父類的方法 在子類里執(zhí)行,而不是在執(zhí)行父類的方法

self::函數(shù)名() 使用這個,當子類調用該方法,他依舊執(zhí)行父類的方法,沒有執(zhí)行子類繼承的父類方法


命名空間的分層結構

namespace demo;  class A 一級命名空間

namespace demo\demo1;  class A 二級命名空間

訪問二級命名空間類:

echo namespace\A::class  <=> demo\demo1\A::class


Trait技術與應用場景

1.Trait 解決了只能從一個類中繼承成員問題

2.代碼復用

3.創(chuàng)建語句與類相同;

4.不允許實例化,只能被調用

接口常量實例

<?php

    namespace _0805;
    use PDO;
    if (!interface_exists(__NAMESPACE__.'\iDbParam')){
        interface iDbParam
        {
            const TYPE = 'mysql';
            const HOST = '127.0.0.1';
            const USER_NAME = 'root';
            const PASSWORD = 'root';
            const DBNAME = 'php';
            public static function connection();
        }
    }

    class Contection implements namespace\iDbParam
    {
        private static $type = iDbParam::TYPE;
        private static $host = iDbParam::HOST;
        private static $username = iDbParam::USER_NAME;
        private static $password = iDbParam::PASSWORD;
        private static $dbname = iDbParam::DBNAME;

        public static function connection()
        {
            $dsn = self::$type.':host='.self::$host.';dbname='.self::$dbname;
            $user = self::$username;
            $password = self::$password;
            return new PDO($dsn,$user,$password);
        }

    }

    $link = Contection::connection();

    $stmt = $link->prepare('SELECT * FROM `staff` LIMIT :limit');
    $stmt->bindValue('limit','5',PDO::PARAM_INT);
    $stmt->execute();
    $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($staffs as $staff)
    {
        $hiredate = date('Y/m/d',$staff['hiredate']);
        echo "<li>{$staff['staff_id']}---{$staff['name']}---{$staff['age']}---{$staff['position']}---$hiredate</li>";
    }

運行實例 ?

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

后期靜態(tài)綁定解釋實例

<?php

namespace _0805;

class A
{
    public static function who()
    {
        echo __CLASS__ ;
    }
    public static function test()
    {
        static :: who();
    }
    public static function test1()
    {
        self::who();
    }
}

class C extends A
{
    public static function who()
    {
        echo __CLASS__;
    }
}
// 用static顯示效果(執(zhí)行的是C類中的who())
C::test();  // _0805\C
echo '<hr>';
//用self顯示效果(執(zhí)行的是A類中的who())
C::test1(); //_0805\A

運行實例 ?

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


后期靜態(tài)綁定應用實例

<?php

namespace _0805;

class Connect
{
    public static function config()
    {
        return new \PDO('mysql:host=127.0.0.1;dbname=php','root','root1');
    }
    public static function connect()
    {
        return self::config();
    }
    public static function  connect1()
        {
            return static::config();
        }

}
class Link extends Connect
{
    public static function config()
    {
        return new \PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }
}
//連接成功
Link::connect1();
//連接失敗
//Link::connect();

運行實例 ?

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

實例

<?php

    namespace demo;

    use PDO;

    trait Db
    {
        //PDO數(shù)據(jù)庫連接
        public function connect($dsn,$username,$password)
        {
            return new PDO($dsn,$username,$password);
        }
    }

    trait Query
    {
        //添加條件
        public function set($pdo,$data)
        {
            $fields = ' (name, age, sex, position, mobile, hiredate) ';
            $values = ' (:name, :age, :sex, :position, :mobile, :hiredate) ';


            $stmt = $pdo->prepare('INSERT INTO `staff` '.$fields .' VALUES '.$values);
            $stmt -> execute($data);

//            die($stmt->debugDumpParams);

            return [
                'count' => $stmt ->rowCount(),
                'id' => $this->pdo -> lastInsertId()
            ];

        }
    }
    //客戶端
    class Client
    {
        //導入兩個方法集
        use Db;
        use Query;

        public $pdo = null;
        //構造函數(shù)
        public function __construct($dsn,$username,$password)
        {
            $this->pdo = $this ->connect($dsn,$username,$password);
        }
        public function insert($data)
        {
            return $this -> set($this->pdo,$data);
        }
    }

    $dsn = 'mysql:host=127.0.0.1;dbname=php';
    $username = 'root';
    $password = 'root';
    $data = [
        'name' => '洪吉潮',
        'age' => 18,
        'sex' => 1,
        'position' => '學生',
        'mobile' => '15626475734',
        'hiredate' => time()
    ];
       //實例化這個類
    $client = new Client($dsn,$username,$password);
      //執(zhí)行sql
    $res = $client->insert($data);
    //返回結果
    echo '成功的新增了 '. $res['count']. '條記錄, 新增的記錄的ID是: '. $res['id'];

運行實例 ?

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


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

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

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

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