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

搜索
博主信息
博文 55
粉絲 3
評(píng)論 0
訪問量 69549
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
命名空間和自動(dòng)加載
王佳祥
原創(chuàng)
760人瀏覽過

命名空間和自動(dòng)加載

一、命名空間基礎(chǔ)

  • 全局成員:寫在函數(shù)外部的東西

  • 全局成員有四個(gè):函數(shù),常量,類,接口

  • 全局成員最大特點(diǎn):不能重復(fù)命名

  • namespace關(guān)鍵字來(lái)定義命名空間

  1. <?php
  2. //命名空間A
  3. namespace A;
  4. //接口
  5. interface iTest
  6. {
  7. public function getSite();
  8. }
  9. //類
  10. class Demo implements iTest
  11. {
  12. public function getSite()
  13. {
  14. return 'php中文網(wǎng)';
  15. }
  16. }
  17. //函數(shù)
  18. function f1(iTest $obj){
  19. return $obj->getSite();
  20. }
  21. //輸出
  22. echo '函數(shù)輸出'.f1(new Demo).'<br>';
  23. echo '類輸出'.(new Demo)->getSite().'<hr>';
  24. /*———————————————————————————————————————————————————————————————————————————————— */
  25. //命名空間B
  26. namespace B;
  27. //在B命名空間中訪問A命名空間中的類方法
  28. echo '命名空間B調(diào)用getSite()方法'.(new \A\Demo)->getSite().'<br>';
  29. //調(diào)用函數(shù)
  30. echo \A\f1(new \A\Demo);


  • 查看類全名用雙冒號(hào)::
  1. <?php
  2. namespace one
  3. {
  4. class Demo
  5. {
  6. public function getSite()
  7. {
  8. return 'php中文網(wǎng)';
  9. }
  10. }
  11. }
  12. /*************************************************************************/
  13. namespace two
  14. {
  15. echo (new \one\Demo)->getSite().'<br>';
  16. //查看當(dāng)前類全名
  17. echo '當(dāng)前類全名:'.two::class.'<br>';
  18. echo '查看one的類全名:'.\one\Demo::class.'<br>';
  19. class D{}
  20. echo D::class;
  21. }
  22. /*************************************************************************/
  23. //全局匿名空間
  24. namespace
  25. {
  26. //因?yàn)橛辛巳帜涿臻g,那么全局成員的聲明就不應(yīng)該放在全局,而應(yīng)該放在空間中
  27. //因此,全局空間應(yīng)該主要寫對(duì)全局對(duì)象的調(diào)用
  28. echo '<br>'.(new one\Demo)->getSite();
  29. }
  30. /*************************************************************************/


  • 如果調(diào)用的函數(shù)與系統(tǒng)內(nèi)置的函數(shù)重名,則優(yōu)先調(diào)用當(dāng)前空間的函數(shù)
  1. <?php
  2. //在空間中訪問類與訪問函數(shù)有什么區(qū)別
  3. namespace one
  4. {
  5. //訪問類
  6. echo \Test::NAME.'<hr>';
  7. function var_dump($name)
  8. {
  9. echo 'HELLO 你好?****'.$name;
  10. }
  11. //如果調(diào)用的函數(shù)與系統(tǒng)內(nèi)置的函數(shù)重名,則優(yōu)先調(diào)用當(dāng)前空間的函數(shù)
  12. //只有在當(dāng)前空間找不到這個(gè)函數(shù),再到全局中去找
  13. var_dump(\Test::NAME);
  14. echo '<br>';
  15. \var_dump(\Test::NAME);
  16. }
  17. //全局
  18. namespace
  19. {
  20. class Test
  21. {
  22. const NAME = 'PHP中文網(wǎng)';
  23. }
  24. }


  • 命名空間的別名
  1. <?php
  2. //命名空間的別名
  3. namespace one;
  4. class Demo{}
  5. /**********************************************************/
  6. namespace two;
  7. class Demo{}
  8. /**********************************************************/
  9. namespace three;
  10. //訪問one::Demo
  11. //從全局空間開始訪問,完全限定名稱的類
  12. echo \one\Demo::class.'<br>';
  13. //類名可以省略掉與當(dāng)前空間名稱重復(fù)的部分
  14. //限定名稱的類:不從全局空間開始訪問
  15. echo A\Hello::class,'<br>';
  16. class Work{}
  17. //3.訪問當(dāng)前空間中的類成員,不要添加空間名稱
  18. //非限定名稱的類:Work
  19. echo Work::class.'<br>';
  20. echo \one\Demo::class.'<br>';
  21. //使用空間或類的別名來(lái)簡(jiǎn)化這種調(diào)用
  22. //空間級(jí)的別名:給空間起個(gè)別名,使用關(guān)鍵字use
  23. //主要是針對(duì)完全限定名稱的類起的別名
  24. use \one as I;
  25. echo '別名訪問:'. I\Demo::class,'<br>';
  26. //2.類級(jí)的別名,給完全限定名稱的類起個(gè)別名
  27. use \two\Demo as R;
  28. echo '別名訪問:' .R::class.'<br>';
  29. //如果別名和類名相同,可以省略as后面的別名
  30. //use \one\Demo as Demo;
  31. //use \one\Demo;
  32. //如果當(dāng)前類中也有一個(gè)與之同名的非限定的類,就不能省略別名
  33. class Demo{}
  34. use \one\Demo as em;
  35. echo '別名訪問:' .em::class;
  36. /**********************************************************/
  37. namespace three\A;
  38. class Hello{}
  39. //完全限定名稱:從全局空間開始,前面總是由一個(gè)"\"
  40. //限定名稱:類名總是會(huì)有一個(gè)或者多個(gè)空間名稱,但不是從全局開始
  41. //非限定名稱:就是不帶有空間名稱的類


二、類的自動(dòng)加載

  • spl_autoload_register():注冊(cè)給定的函數(shù)作為 __autoload 的實(shí)現(xiàn)
  1. spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
參數(shù) 描述
autoload_function 欲注冊(cè)的自動(dòng)裝載函數(shù)。如果沒有提供任何參數(shù),則自動(dòng)注冊(cè) autoload 的默認(rèn)實(shí)現(xiàn)函數(shù)spl_autoload()。
throw 此參數(shù)設(shè)置了 autoload_function 無(wú)法成功注冊(cè)時(shí), spl_autoload_register()是否拋出異常。
prepend 如果是 true,spl_autoload_register() 會(huì)添加函數(shù)到隊(duì)列之首,而不是隊(duì)列尾部。
  1. <?php
  2. //__DIR__
  3. //echo __DIR__,'\\demo7.php';
  4. echo __DIR__.'<hr>';
  5. //require __DIR__ . '\\inc\\lib\\Test1.php';
  6. //echo \inc\lib\Test1::class,'<br>';
  7. //str_replace(目標(biāo)值,替換值,執(zhí)行替換的數(shù)組或者字符串,替換次數(shù))
  8. $path = str_replace('\\',DIRECTORY_SEPARATOR,'\inc\lib\Test1');
  9. echo DIRECTORY_SEPARATOR.'<br>';
  10. echo $path.'<hr>';
  11. require __DIR__ .$path .'.php';
  12. //echo __DIR__ . $path . '.php';
  13. echo Test1::class;
  1. <?php
  2. //類的自動(dòng)加載
  3. try{
  4. spl_autoload_register(function($class){
  5. $path = str_replace('\\',DIRECTORY_SEPARATOR,$class);
  6. $file = __DIR__ . $path.'.php';
  7. if(!(is_file($file) && file_exists($file)))
  8. throw new \Exception('不是文件或文件不存在');
  9. require $file;
  10. });
  11. }catch(Exception $e){
  12. die($e->getMessage());
  13. }
  14. use inc\lib\Test1;
  15. use inc\lib\Test2;
  16. use inc\lib\Test3;
  17. echo Test1::class.'<br>';
  18. echo Test2::class.'<br>';
  19. echo Test3::class.'<br>';


三、學(xué)習(xí)總結(jié)

  • 用namespace關(guān)鍵字來(lái)定義命名空間

  • 命名空間分為完全限定名稱,限定名稱和非限定名稱

  • 完全限定名稱:從全局空間開始,前面總是由一個(gè)”\”

  • 限定名稱:類名總是會(huì)有一個(gè)或者多個(gè)空間名稱,但不是從全局開始

  • 非限定名稱:就是不帶有空間名稱的類

  • 別名的使用:use 命名空間名稱 as 自定義名稱

  • 類的自動(dòng)加載:用spl_autoload_register()函數(shù)

  • 對(duì)類的自動(dòng)加載有了初步認(rèn)識(shí),就是sql_autoload_register()這個(gè)函數(shù)有點(diǎn)難理解,不知道這個(gè)$class這個(gè)變量的值具體是怎么賦值的,我的理解是使用use時(shí)把命名空間名稱賦值給$class

批改老師:天蓬老師天蓬老師

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

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

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

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