亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

php語(yǔ)言

PHP use類文件中的命名空間問(wèn)題

時(shí)間:2025-02-13 23:35:04 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

PHP use類文件中的命名空間問(wèn)題

  PHP的類文件在被其他文件include的時(shí)候不能直接使用其他文件中的已定義的別名。對(duì)于此你了解多少呢?下面是相關(guān)的知識(shí),歡迎閱讀。

  比如有三個(gè)文件。

  test.php 一個(gè)簡(jiǎn)單的腳本運(yùn)行文件

  NameSpaceClass.php 一個(gè)類文件,定義了一個(gè)命名空間

  UseNameSpace.php,一個(gè)類文件,使用了NameSpaceClass命名空間里的類方法

  問(wèn)題描述

  如果在test.php文件中先定義了一個(gè)命名空間別名(use) ,且是NameSpaceClass的命名空間別名,然后直接include UseNameSpace.php,注意,先假設(shè)這里的UseNameSpace.php里不使用任何關(guān)于命名空間的東西。那么test.php代碼能正常運(yùn)行么。

  實(shí)踐

  我們先來(lái)看看這三個(gè)文件內(nèi)容

  test.php

  use UtilNameSpaceClass;

  include("./NameSpaceClass.php");

  include("./UseNameSpace.php");

  UseNameSpace::out_put();

  NameSpaceClass.php

  namespace Util;

  class NameSpaceClass

  {

  public static function out_put()

  {

  echo "This is a Utils namespace ";

  }

  }

  UseNameSpace.php:

  class UseNameSpace

  {

  public static function use_out_put()

  {

  echo NameSpaceClass::out_put();

  }

  }

  從上面可以看出, NameSpaceClass.php里定義了一個(gè)命名空間Util, 并定義了類NameSpaceClass, 以及一個(gè)靜態(tài)方法out_put, 方法中只是輸出了一行字符串

  UseNameSpace.php 中暫時(shí)未定義命名空間,但他的類方法直接調(diào)用了NameSpaceClass的方法,我們知道直接這么做是錯(cuò)誤的,因?yàn)閮蓚(gè)根本不在一個(gè)命名空間內(nèi)。

  test.php 直接靜態(tài)調(diào)用UseNameSpace的方法,最終希望輸出NameSpaceClass.php中的內(nèi)容

  假設(shè)

  如果就目前這種代碼,直接運(yùn)行test.php,會(huì)發(fā)生社么事情??

  按照慣性思維,這種方式test從上到下,一次定義命名空間別名,加載類文件,輸出結(jié)果,雖然最終的UseNameSpace不在NameSpaceClass的命名空間內(nèi),但最開(kāi)始已經(jīng)定義命名空間別名(use UtilNameSpaceClass;)了, 應(yīng)該會(huì)沒(méi)問(wèn)題的了。

  實(shí)踐結(jié)果

  PHP Fatal error: Class 'NameSpaceClass' not found in /tmp/UseNameSpace.php on line 7

  結(jié)果卻出現(xiàn)了錯(cuò)誤

  分析

  慣性思維里,php的include操作類似于把要include的文件內(nèi)容直接插入到該include的位置, 被include的文件應(yīng)該直接能使用原有文件的已經(jīng)定義的任何內(nèi)容。

  但實(shí)際上在命名空間這里卻不一樣, 不同類文件中的命名空間之間是相互分離的,即某個(gè)文件中定義的use的命名空間,在其他的類文件中不能使用。

  以下來(lái)自一個(gè)大牛對(duì)我的指導(dǎo)(漲姿勢(shì))

  在包括其他的許多語(yǔ)言中,在定義類庫(kù)文件的時(shí)候,會(huì)在類庫(kù)中定義好本身的依賴關(guān)系,并做好不同情況下的兼容處理,而這也正式底層類庫(kù)的設(shè)計(jì)難點(diǎn)

  我們PHP的命名空間正是這種依賴關(guān)系的一個(gè)體現(xiàn),在定義好了一個(gè)類庫(kù)后,我們應(yīng)該也要定義好他依賴的本類庫(kù)甚至是第三方的命名空間(用use),我們不能指望用戶在拿到這個(gè)類庫(kù)后還要自己去嘗試找到類的依賴命名空間,最起碼,我們應(yīng)該給他一個(gè)提示,使用了哪些命名空間,怎么加載等等。

  解決

  在UseNameSpace.php中添加依賴類庫(kù)的命名空間別名

  use UtilNameSpaceClass;


【PHP use類文件中的命名空間問(wèn)題】相關(guān)文章:

PHP中的命名空間介紹09-01

PHP中命名空間的方法05-07

PHP關(guān)鍵特性之命名空間實(shí)例09-27

php中目錄文件操作詳談09-20

PHP中讀取大文件的方法11-10

PHP語(yǔ)言的命名規(guī)則09-29

如何在PHP下載文件名中解決亂碼的問(wèn)題08-02

PHP中讀取大文件實(shí)現(xiàn)方法08-26

如何打開(kāi)php文件 php文件怎么打開(kāi)09-06