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

搜索
博主信息
博文 70
粉絲 4
評論 5
訪問量 122170
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
PHP:oop->細說命名空間/命名空間類的自動加載
JiaJieChen
原創(chuàng)
1253人瀏覽過

PHP:oop->細說命名空間/命名空間類的自動加載

一.命名空間

  • 命名空間:namespace 有名稱的空間

  • namespace 需要寫在腳本的頂部,必須是php的第一條指令(除了declare指令)

  • 全局成員: 常量,函數(shù),類(接口),默認聲明在全局空間中的

  • 優(yōu)點:全局調(diào)用

  • 缺點:不能重復(fù)命名

  • php5.3以后引入C# Java中應(yīng)用成熟的命名空間

  • use 在命名空間中的作用/導(dǎo)入命名空間

  • use app\admin\controller as app;

  • 引入別的命名空間到當前空間 為命名空間起別名

  • 引入別的命名空間中的類到當前空間使用, 為別的命名空間中的類起別名

①命名空間->相互訪問

在第二個命名空間中找不到第一個命名空間里面的類,如果我們要進行訪問則要用\斜桿進行指定空間查找,可以理解為路徑查找

在two空間中訪問one空間里的類, 應(yīng)該使用”\”表示root空間(全局空間)

代碼塊

<?php/** * namespace 需要寫在腳本的頂部,必須是php的第一條指令(除了declare指令) *  * namespace ns1; * namespace ns1{ * } *///第一個命名空間namespace one{    class index    {         public function Show()         {             return "這是one空間中的".__METHOD__."方法";         }    }}//第二個命名空間namespace one2{    echo (new \one\index)->Show();}

②命名空間->優(yōu)先級

如果存在同一個類和同一個方法但是命名空間不同,在哪個空間中調(diào)用的語句,優(yōu)先級就是實例這個空間中的方法和類

如果想要訪問別的空間,需要用\找到另外空間的成員

代碼塊

<?php/** * namespace 需要寫在腳本的頂部,必須是php的第一條指令(除了declare指令) *  * namespace ns1; * namespace ns1{ * } *///第一個命名空間namespace one{    class index    {         public function Show()         {             return "這是one空間中的".__METHOD__."方法";         }    }    //查看類的完全限定名稱    echo index::class;}//第二個命名空間namespace one2{    class index    {        public function Show()        {            return "這是one2空間中的".__METHOD__."方法";        }    }    /*    *如果存在同一個類和同一個方法但是命名空間不同,    *在哪個空間中調(diào)用的語句,優(yōu)先級就是實例這個空間中的方法和類    */    echo ( new index)->Show();    echo "<br>";    echo index::class;    echo "<hr>";    /*    *如果想要訪問別的空間,需要用\找到另外空間的成員    */    echo (new \one\index)->Show();    echo "<br>";}

③命名空間->自定義函數(shù)和系統(tǒng)函數(shù)優(yōu)先級

  • 假如在命名空間中,定義一個類方法,這個類方法和系統(tǒng)函數(shù)重名,那調(diào)用這個函數(shù),會出現(xiàn)什么結(jié)果?

在命名空間中如果有一個函數(shù)和系統(tǒng)函數(shù)重名,我們?nèi)フ{(diào)用這個函數(shù)的話會優(yōu)先調(diào)用自定義函數(shù),而不是系統(tǒng)函數(shù),因為系統(tǒng)函數(shù)是全局函數(shù),要在根空間中查找

在子空間中加入\斜桿來查找根空間中的系統(tǒng)函數(shù),如果子空間未定義這個系統(tǒng)函數(shù),系統(tǒng)會默認調(diào)用根空間中的系統(tǒng)函數(shù)

代碼塊

<?php/** * namespace 需要寫在腳本的頂部,必須是php的第一條指令(除了declare指令) *  * namespace ns1; * namespace ns1{ * } */namespace one{class User{    /*     *假如在命名空間中,定義一個類方法    *這個類方法和系統(tǒng)函數(shù)重名,那調(diào)用這個函數(shù)    *會出現(xiàn)什么結(jié)果?    */    //列如定義一個var_dump 和md5     public function var_dump()    {        return "你調(diào)用的是我".__METHOD__;    }    public function md5()    {        return "你調(diào)用的是我".__METHOD__;    }}     //調(diào)用類中var_dump    echo (new User)->var_dump();    echo "<hr>";    //調(diào)用類中md5    echo (new User)->md5();    echo "<hr>";    //調(diào)用根空間函數(shù)    echo \md5("222");}

④命名空間->Use在命名空間中的作用

  • Use在命名空間中的作用

    • 引入別的命名空間到當前空間 為命名空間起別名

    • 引入別的命名空間中的類到當前空間使用, 為別的命名空間中的類起別名

  1. use 導(dǎo)入命名空間

    成功導(dǎo)入命名空間以后 就可以不使用類的完全限定名稱調(diào)用類元素

  2. use 為導(dǎo)入的空間取別名

    as關(guān)鍵字可以給導(dǎo)入的空間取別名,防止導(dǎo)入的空間名稱一樣

  3. use 也可以導(dǎo)入空間中的類

    use也可以直接導(dǎo)入空間中想要的類名稱

代碼塊

<?php/* * use 在命名空間中的作用 * 1. 引入別的命名空間到當前空間 為命名空間起別名 * 2. 引入別的命名空間中的類到當前空間使用, 為別的命名空間中的類起別名 */ //定義一個命名空間 namespace app\admin\index {    //輸出一個工作類    class demo4    {        public function Show()        {            return "輸出當前的空間方法:".__METHOD__;        }    } } //用use 把另外一個命名空間引入到這個命名空間namespace app\admin\connect{    //1. use 導(dǎo)入命名空間    use app\admin\index;    // 成功導(dǎo)入命名空間以后 就可以不使用類的完全限定名稱調(diào)用類元素     echo (new index\demo4)->Show(),'<hr>';    //2. use 為導(dǎo)入的空間取別名    use app\admin\index as one ;    echo (new one\demo4)->Show(),'<hr>';    //3. use 也可以導(dǎo)入空間中的類    use app\admin\index\demo4 ;    echo (new demo4)->Show(),'<hr>';}

二.命名空間類的自動加載

代碼塊

<?php/**類的自動加載*spl_autoload_register — 注冊給定的函數(shù)作為 __autoload 的實現(xiàn)*/spl_autoload_register(function($className){    //先檢查當前要加載的類    printf("類名稱:%s<br>",$className);    //-----------------------------    /*    *str_replace — 子字符串替換    *用DIRECTORY_SEPARATOR,自動識別當前系統(tǒng)文件分隔符    *解決在不同環(huán)境中的文件引用不同    */    $file = str_replace('\\',DIRECTORY_SEPARATOR,$className).".php";    echo $file;    /*    * 判斷此文件是否正常和是否為空,如果正常就返回    * is_file — 判斷給定文件名是否為一個正常的文件    * file_exists — 檢查文件或目錄是否存在    */    if( !(is_file($file) && file_exists($file)) )    throw new \Exception('文件名不合法或者文件不存在');    require $file;});
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

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

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