我应该在 php 中的什么地方使用 'use'?

Where should I use 'use' in php?

我知道 php use 大部分时间都在使用(没有双关语意),以缩短命名空间 class 名称以供使用。我的问题如下:我有一个项目可能会使用大约 300-400 classes。所有这些 classes 都有命名空间,并放在它们各自的目录中,因此注册的自动加载可以在确实需要时包含它们,从而防止在不一定需要时加载一堆文件的开销.

现在我想用use来缩短一些class的名字,这样我写代码可能会更快。我的问题如下:

我应该把 use 放在哪里来缩短这些东西?

  1. 是不是应该直接放在脚本文件里面定义需要缩短的classes?

  2. 我可以创建一个单独的文件来定义所有 use 命令吗?

我更喜欢第二个选项,我唯一不知道的是,如果我这样做,是否会 php 加载我作为参数提供的所有文件以供使用?

例如,如果我这样做:

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

将立即包含两个对象 ClassClass2 的定义的两个文件,还是仅当我稍后在代码中编写类似 new Class() 的内容时才包含。

  1. Could I create a separate file where I define all of my use commands?

你不能拥有这个 (docs):

Note: Importing rules are per file basis, meaning included files will NOT inherit the parent file's importing rules.

解开你的疑惑:)

为了说明第二点,这是一个文件的内容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; ?>

如果我们这样包含:

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

我们在名为 $var 的函数中创建一个局部变量。

如果我们这样做

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

我们在 php 中创建了一个名为 $var 的全局变量。

在最低级别 include 只是合并 php 脚本!如果脚本 defines/declares classes/functions 将只有 declared/defined。但是当包含在脚本中的是全局代码(而不是在函数中)时,那么它在很大程度上取决于您包含它的位置,包含的 code/script 将如何工作。 (见上面的例子)

使用这种方式(以下示例:)以获取更多说明访问 (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"
?>