簡體   English   中英

在哪里使用php中的“ use”?

[英]Where should I use 'use' in php?

據我所知,PHP的use是大多數使用的時間(沒有雙關語意),縮短命名空間中的類名稱的用法。 我的問題如下:我有一個可以使用大約300-400個類的項目。 所有這些類均已命名空間,並放置在各自的目錄中,因此,在確實需要時,已注冊的自動加載可以包括它們,從而避免了在不一定需要它們時加載一堆文件的開銷。

現在,我想使用use來縮短一些類名,這樣我可以更快地編寫代碼。 我的問題如下:

我應該在哪里use以縮短這些時間?

  1. 是否應該將它們直接放在定義了需要縮短的類的腳本文件中?

  2. 我可以在定義所有use命令的地方創建一個單獨的文件嗎?

我更喜歡第二種選擇,我唯一不知道的是,如果我那樣做,php是否不會加載我作為參數使用的所有文件?

例如,如果我做這樣的事情:

use My\Class\Path\Class as Class;
use My\Class\Path\Class2 as Class2;

將立即包含兩個對象ClassClass2的定義的兩個文件,或者僅當我稍后在代碼中編寫類似於new Class()東西時才Class2兩個文件包含在內。

  1. 我可以在定義所有use命令的地方創建一個單獨的文件嗎?

您不能使用以下( docs ):

注意:導入規則是基於文件的,這意味着包含的文件將不會繼承父文件的導入規則。

這消除了您的疑慮:)

為了使第二點更清楚,這是一個文件namespacetest.php內容:

 namespace x {
    class a {}
 }
 namespace y {
    use x\a;
    class b extends a {}
 }
 namespace {//global namespace
    use y\b as a;
    new a();
 }

您可以知道將每個名稱空間塊放置在單獨的文件中,並且其工作方式相同。

有關的內容include

假設我們有一個文件inctest.php其中<?php $var=123; ?> <?php $var=123; ?>

如果我們以這種方式包括:

function yxz(){
   include 'inctest.php';
}

我們在名為$var的函數中創建一個局部變量。

如果我們這樣做

function xyz(){}
include 'inctest.php';

我們在php中創建了一個名為$var的全局變量。

在最低級別include僅合並php腳本! 如果腳本定義/聲明了類/函數,則只會聲明/定義。 但是,當腳本中包含的是全局代碼(不在函數中)時,這很大程度上取決於您包含它的位置,所包含的代碼/腳本如何工作。 (請參見上面的示例)

使用這種方式(以下示例:)進行更多說明,請訪問( http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.innamespace

<?php
namespace foo;
use blah\blah as foo;

$a = new name(); // instantiates "foo\name" class
foo::name(); // calls static method "name" in class "blah\blah"
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM