【基礎】PHP為什麼要使用命名空間

2021-03-02 PHP自學中心

基礎教程力薦

碼農必須擁有一本屬於自己的教科書,當你基礎忘記了,也可以直接拿起來閱讀,鞏固基礎

文章正文

作者:cyw 
來源:博客
原文:https://www.cnblogs.com/martin-tan/p/4864539.html

概要:

1. 聲明了命名空間之後,下面的const, function, class都會劃歸到該命名空間。

2. 只有聲明過命名空間的PHP 文件才能加載有命名空間的PHP文件。

3. PHP 5.3 及以上才能使用命名空間

 

名詞:

    關鍵字:namespace 用來聲明 本PHP文件的命名空間

    常量:__NAMESPACE__ 用來返回當前命名空間的名稱 默認為空字符串

    操作符: use 默認以最後一個\後的字符串為別名,配合 as 則為 as後的字符串,與MySQL的欄位別名一致。

為什麼使用命名空間

我們的代碼可能和其他開發者的代碼使用相同的類名、接口名、函數或常量名,如果不使用命名空間,名稱會起衝突,導致PHP執行出錯。而使用命名空間將代碼放到唯一的廠商命名空間,我們的代碼就可以和其他開發者使用相同的類名、接口名、函數或常量名。

當然如果你開發的是小型個人項目,只有少量的依賴,類名衝突可能不是問題,但是如果在團隊中工作,開發用到許多第三方依賴的大型項目,就要認真對待命名衝突問題,因為你無法控制項目依賴在全局命名空間中引入的類、接口、函數和常量,這也是為什麼要使用命名空間的原因。

實際操作如下:

在apache目錄下建立如下文件:index.php,Order.php,User.php

 

Order.php 的內容為

<?php

namespace Order;

const STR = 'order list<br />';

function detail()
{
    return 'order detail<br />';
}
function call_by_self()
{
    return 'call by self<br />';
}

class Orderlist
{

    public function __construct()
    {
        echo 'Class NameSpace is "', __NAMESPACE__, '"';
    }
    public function show_list()
    {
        for ($i = 0; $i < 5; $i++) {
            echo "<ul><li>this is order$i<br />";
            
            echo detail();
            echo "</li></ul>";
        }
    }
}

echo \Order\call_by_self();

index.php 內容為:

<?php

namespace index;
include_once('Order.php');


use Order\Orderlist;
$orderlist = new orderlist;
$orderlist->show_list();


use Order;
echo Order\STR;
echo Order\detail();

列印結果為:

以上內容包含了:通過命名空間來訪問文件和直接實例化訪問,以及本空間直接訪問。

命名空間的存在是為了防止兩個同名的class都被載入,使用命名空間在加載第三方的類時能避免同名衝突。

 

下面來說一下自動加載

SPL 的全稱是:Standard PHP Library PHP標準庫,在PHP5以後已經內置在PHP中,無需另外安裝。

SPL包含了一套針對數據結構、迭代器、異常、文件處理等的函數庫。

 

自動裝載庫有以下函數

spl_autoload_call:嘗試調用所有已註冊的__autoload()函數來裝載請求類

User.php 內容為:

namespace User;



spl_autoload_register(function($className) {
    var_dump($className);
});
spl_autoload_call('Order');

列印結果為:

 

SPL自動載入函數包含如下:

spl_autoload_extensions: 註冊並返回spl_autoload函數使用的默認文件擴展名。

get_include_path: 設置默認引用的文件夾

spl_autoload_register: 自動引入文件

 

實際操作如下:

我們重新調整目錄結構和並複製order 到 lib下面 如下:

 

修改User.php 如下:

namespace User;




define('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR);
spl_autoload_register(function ($class) {
    $path = LIB_DIR . $class . '.lib.php';
    include ($path);
});

spl_autoload_call('Order');
use Order;

$orderList = new \Order\Orderlist();
$orderList->show_list();


列印結果為:

 

注意:

當採用SPL載入文件時,use並不能觸發spl_autoload_register函數,他會被new觸發,這樣就會提示找不到文件,

所有採用spl_autoload_call 來提前觸發自動載入。


以上是文章全部內容,有學習與經驗交流的可以加PHP自學中心。一起學習,交流與進步!

相關焦點

  • php的自動加載和命名空間
    強烈建議不要使用本特性。見官方文檔- https://www.php.net/manual/zh/function.autoload.php本地調用會報如下錯誤,Deprecated: __autoload() is deprecated, use spl_autoload_register() instead in XXX所以,PHP 版本號大於 5.12,都可以使用spl_autoload_register
  • php命名空間namespace詳解
    PHP的命名空間主要解決三種衝突的問題:常量,函數,類簡單來說:namespace就相當於是用來建一個目錄,將namespace下面的代碼放在該目錄裡面,與外面的區分開來。例如:/***namespace 之前不能有任何代碼,除了declare();多個文件可以使用同一個命名空間,但同一命名空間下定義的內容是不能衝突的。
  • [基礎] 特別要注意:PHP注釋語法規範與命名規範詳解
    或許你早就知道如何用,或許對你有些許幫助,可是最後還是感謝你的關注鞏固php基礎,分享給你視頻教程【PHP7.x入門到進階,初學者直接獲取!】,公眾號裡回覆:20200202   免費領取提取碼!注釋在寫代碼的過程中非常重要,好的注釋能讓你的代碼讀起來更輕鬆,在寫代碼的時候一定要注意注釋的規範。
  • php變量是什麼?php變量的數據類型、命名規則等詳細介紹
    本篇將介紹「php變量是什麼?php變量的數據類型、命名規則以及php變量的使用教程」,有興趣的朋友可以了解一下!一、前言php是一門開源的腳本語言,它的語法簡單實用,利於學習,被廣泛的使用於Web開發領域。目前很多中小型網站都是使用php語言開發的,如果我們能學好php語言,也是很有前途的。今天小編為什麼要介紹php變量?
  • 為什麼程式設計師都黑php? PHP中文網有話說!
    為什麼程式設計師都喜歡黑php?這個嘛!你罵一句php是垃圾試試,保準php程式設計師不揍扁你!這就好像自己的母校,縱然有很多不好的地方,但是只允許自己調侃,不允許外人罵半句。第一個問題,如果你只是想單純的寫後臺程序,可以不用學太多的html/css尤其是css,後臺程序基本是邏輯,css基本用不了太多,但是還是要了解一些基礎,html基本的標籤要知道使用,不要php提交表單連這些都不會用,總之先學後臺的話還是要一點html的基礎吧。
  • 怎麼理解php中的變量?php變量命名注意什麼?
    簡單理解變量是臨時存儲值的容器,它可以儲存數字、文本、和一些複雜的數據(比如說字符串、複雜的排列組合等),變量在php語言中居於核心地位,是使用php的關鍵所在,變量的值在程序運行中會隨時發生變化,能夠把程序中準備使用的一段數據起一個簡短容易記得名字,另外它還可以保存用戶輸入數據和特點運算的結果,總結變量是變量是用於跟蹤幾乎所有類型信息的簡單工具。
  • php學習之php的預定義常量的使用
    ]);2訪問常量說明:直接使用常量名就可以了.。如:echo NAME;常量的使用:網站的配置文件中使用。賦值目錄中名不包括末尾斜槓__FUNCTION__:函數名稱,php4.3.0新增,php5起本常量返回該函數被定義時的名字(區分大小寫)在php4中該值總是小寫__CLASS__:類的名稱__TRAIT__:trait的名稱__METHOD__:類的方法名__NAMESPACE__:當前命名空間的名稱mvc:URL傳遞數據:index.php:c=getuser&a=xxxx&m=
  • PHP基礎
    asd');練習2、$a=35;   $b=8540;   在不定義新的變量的基礎上,把這兩個變量的值調換   (使用四種或四種以上不同的方法)php header("Content-Type:text/html;charset=utf-8");//編碼 /* 2、$a=35;   $b=8540;   在不定義新的變量的基礎上,把這兩個變量的值調換   (使用四種或四種以上不同的方法) */ $a=35; $
  • php常量有哪些特點怎麼使用?php預定義常量有哪些?
    常量和變量都是php中的存儲單元,其實在實際運行中,常量的值和地址值是會發生變化的,所以常量不能嚴格理解為『運行過程中不變的量』描述,今天主要討論不是常量的概念,這一點了解即可,不必太過於糾結。常量的定義和使用在php中常量和變量的聲明方式不一樣,常量是用define()函數函數來定義常量,常量的命名和變量相似,要遵循php的命名標準,常量和變量命名最大不同是常量默認對大小寫敏感(區分大小寫)但是一般常量書寫都是大寫的字母,不要在常量前加上「$」符號,這是與變量明顯的區別。
  • php基礎大通關——十分鐘了解php基礎知識點之二
    本節我們繼續通過練習題的方式來熟悉php的基礎知識點。1. echo 和 print 有什麼區別?php常用函數3. Joomla 在 PHP 中是什麼? 一套功能豐富的庫 開源 CMS 設計動態頁面的框架 可重用 PHP 組件的框架和分發系統解析:Joomla!
  • php基礎大通關之二,看看你能過幾關!
    本節我們繼續回顧PHP的基礎知識,通過試題的方式進行講解!看看你是否能夠全部做對。php只是分類1. 在 PHP 中未定義的值使用以下哪個關鍵字表示? undef null None PHP 中沒有這樣的概念正確答案為null或NULL,php中對於控制的定義使用null,不區分大小寫。2. 以下php代碼列印的結果是?<?php if(null===false){ echo 'true';}else{ echo 'false';} ?
  • WordPress使用timthumb.php截取文章縮略圖教程
    相信很多人對WordPress的縮略圖不太滿意,因為WordPress系統會默認裁剪三種縮略圖,然後博客上傳的圖片就會生成不同大小的三份,而其中兩份又沒有使用,這樣下來嚴重佔用並浪費了我們的網站空間,今天暖島交大家一種方法,完美結局文章縮略圖的困擾:使用timthumb.php進行裁剪縮略圖。
  • PHP-語言基礎「程式設計師培養之路第三十一天」
    第一節 hello world文件命名 文件後綴名為 php 文件名中不可包含中文、空格、特殊符號 建議使用有意義的英文單詞命名php.......?>注意:純php腳本文件要求:1. 開始標籤要在第一行頂頭寫;2. 刪除結束標籤。
  • PHP開發編碼規範特麼要注意
    2 整體要求技術部php開發規範將參照PEAR的規範,基本採用PEAR指定的規範,在其基礎上增加、修改或刪除部分適合具體開發環境的規範。本規範只針對PHP開發過程中編碼的規範,對於PHP開發項目中文件、目錄、資料庫等方面的規範,將不重點涉及。
  • php中Session使用方法詳解
    同時,也在伺服器端創建一個以Session ID命名的文件,用於保存這個用戶的會話信息。Session以數組的形式使用,如:$_SESSION['session名']註冊一個會話變量和讀取Session  在PHP中使用Session變量,除了要啟動之外,還要經過註冊的過程。註冊和讀取Session變量,都要通過訪問$_SESSION數組完成。在$_SESSION關聯數組中的鍵名具有和PHP中普通變量相同的命名規則。
  • php學習之php變量及變量的八種數據類型
    1.什麼是變量說明:在php中存儲數據的一種方式,就是i可以發生改變的量,這種方式是在內存中開闢一個可以存放數據的空間,給這個空間起個名稱,這時候的空間就可以稱為一個變量。在運行過程中這個值是可以發生改變的當前空間的名稱就是變量名,當前空間的數據(八種數據類型)就稱為變量值2.定義變量並賦值定義變量:$變量名; 注意這樣定義的變量是可以的 ,但是不能使用,直接輸出會報錯,必須後面跟一個變量值才可以使用notice:注意undefined:未定義variable:變量定義變量並賦值:$變量名 = 變量值
  • 2020年PHP面試題整理(附帶答案)
    psr4:#完整的類名為\a\b\c\Log#命名空間前綴前綴為:a\b#前綴對應的基礎目錄為:./vendor#文件實際目錄為:./vendor/c/Log.php#註:即把去掉最前面的命名空間分隔符後的a\b\c\Log中的命名空間前綴替換成基礎目錄,然後把命名空間分隔符替換成目錄分隔符,並把文件名補上後綴 .php 。
  • PHP之pthread拓展使用以及坑
    PHP是為WEB開發而生,以前PHP是沒有線程的說法,直到pthread的出現,這樣php增加了活力;一.
  • 培養自己的php編碼規範,養成一個好習慣
    文章來自於:博客連結:商務合作的請加微信(QQ):2230304070為什麼我們要培養自己的編碼規範希望能對其他的朋友以啟示1、代碼的書寫規範文件夾的命名:文件夾同一使用小寫字母。如存放控制器的文件夾,直接命名為controller即可文件的命名:如果是類文件的話,那麼文件的命名應該同類名稱保持一致,統一使用大駝峰。
  • php基礎訓練,3分鐘課堂
    接上一節,php基礎試題訓練,祝你快速掌握php內容!4、在php中,以下哪個關鍵字終止 for 循環或 switch 語句,並將執行轉移到緊跟 for 循環或 switch 之後的語句? continue break解析:在php中,使用break來種植循環或者switch語句,並將執行轉移到緊跟for 循環或 switch 之後的語句。5,在php 中,下列哪個函數返回數組中值的和?