PHP框架中的名称空间和自动加载
我的项目中有两个文件夹:应用程序和系统。系统包含配置、核心、HTML、URL等文件夹。它们中的每一个都包含一些类集 我使用这个约定:类的名称空间反映了它的文件结构——这使我可以轻松地自动加载它们 所以:PHP框架中的名称空间和自动加载,php,Php,我的项目中有两个文件夹:应用程序和系统。系统包含配置、核心、HTML、URL等文件夹。它们中的每一个都包含一些类集 我使用这个约定:类的名称空间反映了它的文件结构——这使我可以轻松地自动加载它们 所以:\Project\u Name\System\Core\Foo放在System/Core/Foo.php中 然而,对于我的代码的用户来说,调用这么长的名称并不是最快、最好的方式。那么有两个问题: 创建两个命名空间为\Project\u Name的空类可以吗?在应用程序类中使用一个“use”关键字,
\Project\u Name\System\Core\Foo
放在System/Core/Foo.php
中
然而,对于我的代码的用户来说,调用这么长的名称并不是最快、最好的方式。那么有两个问题:
\Project\u Name
?然而,这将促使我创建更长的类名,以反映文件结构,并使自动加载变得不易理解你认为什么是最好的方法?你忘记了解决方案3:使用aslias
use \Project_Name\System\Core\Foo;
use \Project_Name\System\Core\Bar as CoreBar;
$x = new Foo;
$y = new CoreBar;
这两种解决方案的问题是,你让你的懒惰决定你的应用程序结构。那么,你认为什么最有效?我不确定问题是什么。您的用户可以编写一次
use\Project\u Name\System\Core\Foo
,然后只参考Foo
,或者更好的是,他们的IDE可以自动完成这项工作。自己的框架。问题是,我不想对每个类都使用“use”关键字,因为它们太多了。我认为最好使用一个简单的名称空间。但这让我怀疑像symphony这样的项目是否使用了整个文件结构的名称空间。而且我不确定这是否会对可理解性造成太大的干扰。嗯,像Symphony这样的项目确实使用了\extrement\deep\path\until\you\get\to\something\usiver\usiver,其优点是非常有争议的(利与弊…),如果您的框架/代码不需要这一点,您为什么要对自己这样做?与人们的想法相反。1或2个级别的名称空间足以满足我所见过的大多数项目。大多数情况下,深度路径被滥用为一种继承/类型分组的东西,除非你在一个巨大的代码库中编写主要的抽象代码,否则通常是不需要的。我不希望我的代码的懒惰用户放弃它,因为他们必须使用500px宽的类名。如果有人想为基文件编写锚,他会使用,而不是使用,或者……我可以对整个名称空间使用别名吗?也许这会使类名缩短一点。最酷的是在一个高级类中使用“use”关键字,而这个高级类已经被所有其他类扩展了。@user1615069你真的用像素来限定类名吗?!?(除此之外:我的示例中的类名大约为200px;))但是,可以让别名也指向命名空间:use Foo\Bar;新建条形图\Baz()
。你绝对应该阅读,手册是你的朋友。如果你想,我可以用百分比来限定它们:P谢谢。