日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP中的命名空间

發布時間:2023/11/29 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中的命名空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. PHP中的命名空間是什么?

官方解釋在此:?命名空間概述

命名空間用一句話說,就是:把 類、函數、變量 等放到邏輯子文件夾中去,以避免命名沖突。

注:命名空間跟實際代碼文件在文件系統中的路徑沒有任何關系,如果你感到迷茫,可以看看本文最后一節。

2. 被隱藏的第一個 \

在每個 PHP 文件的最開始定義命名空間:

<?php namespace TinyLara\TinyRoute;class TinyRoute {... }

在定義命名空間之后引入命名空間:

<?php namespace TinyLara\TinyRoute;use TinyLara\TinyView\TinyView;class TinyRoute {... }

上述代碼中,

namespace TinyLara\TinyRoute use TinyLara\TinyView\TinyView

這兩行的真實路徑是: \TinyLara\TinyRoute、\TinyLara\TinyView\TinyView,頂級命名空間標識(第一個 \ )被省略了。

3. 被隱藏的別名

在上一節中中,這一行代碼

use TinyLara\TinyView\TinyView

的完整寫法應該是:

use \TinyLara\TinyView\TinyView as TinyView;

如果不指定別名,那就默認別名為類名。

4. 使用絕對路徑直接調用

?

<?php namespace TinyLara\TinyRoute;class TinyRoute {public function foo(){return \TinyLara\TinyView\TinyView::fuck();} }

使用絕對路徑調用類時頂級命名空間標識(第一個 \ )不能省略。(很多人都在這個地方迷惑了)

5. 命名空間的實際價值

命名空間的存在是為了解決下面兩個問題:

  • 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
  • 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。
  • 目前非常流行的 Composer 就是一個基于命名空間的包管理器/依賴管理器,同樣,Laravel 能達到今天的成功,很大程度上也是因為PHP5.3的普及,生恰逢時。你可以在?https://packagist.org/?上下載到各種 composer 包,類似于 yum、npm或者gem。

    6. 同一命名空間下的類可以任意相互調用

    <?php namespace A;class ClassA {public static function test() {echo 'Success!';} } <?php namespace A;class ClassB {public static function test() {ClassA::test(); // 直接調用即可} }

    直接調用即可。

    7. 關于代碼文件的結構

    PSR-4 命名空間規范約定了 PHP 類的命名空間應該和實際在文件系統中的位置一致,而現實中絕大多數 PHP 框架為了方便都采納了這條規范,最明顯的就是 Laravel 4 到 5 的轉變。在這種情況下,我發現不少新手又迷茫了,錯誤地理解了我在上文中的闡述的“路徑”的概念?;诖宋乙唵沃v述一下 PHP 運行的基本流程,我相信看完你們就不會再有上面的誤解了。

    PHP 運行流程

    在一個典型的 Apache + ?mod_php 架構的 PHP 運行環境中,一個 PHP 網站是這樣運行的:

  • Apache 收到用戶的 HTTP 請求
  • 這個請求是以 .php 結尾或者是一個不存在的路徑(.htaccess 會將其轉發到 index.php)
  • Apache 的 mod_php 會啟動一個新的 PHP 進程(PHP 解釋器),讀取 HTTP 請求的 URL 中的那個 .php 文件或者 index.php
  • 被讀取進 PHP 解釋器的字符串被按照 PHP 的語法進行解析。為了方便理解,我們將這些經過解析的字符串所生成的 context(上下文)命名為 Matrix
  • 然后 PHP 解釋器會根據從 Matrix 中解析出的特定 PHP 語句(如 require)載入其他 PHP 文件,并將其內容以字符串的形式加入 Matrix
  • 最終 Matrix 變成一個數萬行代碼的巨型上下文(為了便于理解可以想象成巨長的代碼文件字符串),PHP 解釋器會按照 PHP 語法執行 Matrix,進行數據庫連接、網絡請求、文件讀寫等操作
  • 每一次的 echo 都會被寫入到輸出緩沖區,最終這個巨長的代碼字符串被執行完畢,PHP 進程退出內存
  • 緩沖區中就是要發給用戶的 HTTP response,其實就是一堆字符串,只不過它遵守 HTML 規范,可以被瀏覽器解析。這一堆字符串被 Apache 發送回用戶的瀏覽器,瀏覽器渲染,用戶看到內容
  • 命名空間在哪里?

    命名空間從始至終就是一個“內部偽概念”,只是用于解決類和變量的命名沖突,從來就跟實際文件結構沒有半毛錢的關系。讓大家疑惑的其實是自動加載,當它和命名空間混雜在一起的時候,就不容易理解了。命名空間從來就是一個純 PHP 內部的概念,你可以把整個 Laravel 框架的所有文件合并成一個巨大的 PHP 文件,取消自動加載,除了性能會損失一些,功能不會受到任何影響,命名空間依舊運轉良好。

    轉載于:https://www.cnblogs.com/tpshop/p/8297348.html

    總結

    以上是生活随笔為你收集整理的PHP中的命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。