Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP框架中的名称空间和自动加载_Php - Fatal编程技术网

PHP框架中的名称空间和自动加载

PHP框架中的名称空间和自动加载,php,Php,我的项目中有两个文件夹:应用程序和系统。系统包含配置、核心、HTML、URL等文件夹。它们中的每一个都包含一些类集 我使用这个约定:类的名称空间反映了它的文件结构——这使我可以轻松地自动加载它们 所以:\Project\u Name\System\Core\Foo放在System/Core/Foo.php中 然而,对于我的代码的用户来说,调用这么长的名称并不是最快、最好的方式。那么有两个问题: 创建两个命名空间为\Project\u Name的空类可以吗?在应用程序类中使用一个“use”关键字,

我的项目中有两个文件夹:应用程序和系统。系统包含配置、核心、HTML、URL等文件夹。它们中的每一个都包含一些类集

我使用这个约定:类的名称空间反映了它的文件结构——这使我可以轻松地自动加载它们

所以:
\Project\u Name\System\Core\Foo
放在
System/Core/Foo.php

然而,对于我的代码的用户来说,调用这么长的名称并不是最快、最好的方式。那么有两个问题:

  • 创建两个命名空间为\Project\u Name的空类可以吗?在应用程序类中使用一个“use”关键字,我就可以解决这个问题。但结果是,我在“system/”中的一个奇怪文件夹中得到了许多空类和文件夹结构
  • 或者我应该在每门课上都使用
    \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谢谢。