据我所知,php use
大部分时间都是使用(没有双关语),以缩短命名空间的类名以供使用。我的问题如下:我有一个项目,可能使用大约300-400个班级。所有这些类都是命名空间,并放在它们各自的目录中,因此注册的自动加载可以在它们确实需要时包含它们,从而防止加载一堆文件的开销,当它们不一定需要时。
现在我想使用use
来缩短某些类名,因此我可以更快地编写代码。我的问题如下:
我应该在哪里放use
来缩短这些内容?
我应该将它们直接放在需要缩短类的脚本文件中吗?
我可以创建一个单独的文件来定义所有use
命令吗?
我更喜欢第二个选项,我唯一不知道的是,如果我这样做,不会php加载我作为参数使用的所有文件吗?
例如,如果我这样做:
use My\Class\Path\Class as Class;
use My\Class\Path\Class2 as Class2;
将立即包含两个对象Class
和Class2
的定义的两个文件,或者仅当我稍后在代码中写入类似new Class()
的内容时。
答案 0 :(得分:1)
答案 1 :(得分:1)
要明确第二点,这是一个文件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脚本!如果脚本定义/声明类/函数,那么将只声明/定义。但是当包含的脚本是全局代码(不在函数中)时,它很大程度上取决于您包含它的位置,包含的代码/脚本将如何工作。 (见上面的例子)
答案 2 :(得分:0)
使用这种方式(下面的示例:)获取更多说明访问(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"
?>