当前位置:  开发笔记 > 编程语言 > 正文

为什么我们应该使用composer而不是include_once或require_once?

如何解决《为什么我们应该使用composer而不是include_once或require_once?》经验,为你挑选了1个好方法。

我搜索了许多博客和网站,但找不到完美的答案。每当我使用作曲家时,我都必须包括autoload.php文件,然后对于每个要自动加载的类,我都必须将该类与命名空间一起使用。现在,我想知道这个作曲家的优势是什么,在这里我可以轻松地包含类文件通过include_once或require_once而不是分别使用autoload.php和类文件。当我使用作曲家时,我必须编写以下代码:

include_once("vendor/autoload.php");
use namespace/derectoryname/classname;

每当我手动添加

include_once("classname.php");

谁能清除这些?



1> yivi..:

首先,作曲家的主要优势是处理依赖关系(以及依赖关系的依赖关系,依此类推)。自动装带器正在结霜。

这个问题最好摆在includevs autoloader的位置,然后变得更加有趣。

首先,简洁。使用一种方法,每个文件最终将使用两个声明:useinclude,而使用自动加载器则只需要声明这些use语句,然后让自动加载器完成实际加载文件的工作。

另外,性能。如果您includerequire您的要求位于文件顶部,则将始终加载该其他文件。使用自动加载器,仅当您实际尝试使用所需的类时,您才这样做。在尝试实例化或使用任何必需的类之前,自动加载器不会访问文件系统并尝试查找所需的类,从而使它更有效,并且仅在实际需要工作时才进行工作。

作为一个粗略的例子:

use Namespace\Package\Service\ServiceProvider
use Namespace\Package\Exception\ServiceProviderException

if (isset($options['service_id'])) {
   try {
      $service = ServiceProvider::getService($options['service_id']);
   }
   catch (ServiceProviderException $e) {
       // do your exception handling
   }
}
else {
   // and now for something entirely different
}

这样,ServiceProvider仅当您确实满足要求时,才会加载声明的文件,并且ServiceProviderException仅在必须捕获异常时才声明的文件(尽管公平地说,自动加载器会在ServiceProvider需要时将其包括在内)throw该异常,而不是之前)。

最重要的是,您的关注点变得更加整洁。use NameSpace\Package\ClassB不需要您的ClassA 知道您实际在哪里存储该文件。这不是它的工作,也不应该在乎文件系统的实际结构,从而使代码更具可移植性。其他地方的人可能具有vendor与您不同的结构,并且如果使用自动加载器而不是在require语句中对文件路径进行硬编码,则仍然可以轻松使用您的代码。

这应该或多或少足以表明自动加载是一种比including手动需求更现代,高效和可移植的工作方式。

既然你已经在使用的作曲家来处理你的依赖,这是真棒,你得到的好处自动加载机免费!

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有