gpt4 book ai didi

php - 在每个页面上使用 spl_autoload 而不使用关键字?

转载 作者:行者123 更新时间:2023-12-04 16:52:03 26 4
gpt4 key购买 nike

我们最近一直在使用 OO 重写 PHP 应用程序的模型代码。我们已经完成了类,并且我们包含了命名空间(以 Project\Level1\Level2 或其他形式)。由于这是一个已经构建的应用程序,因此有很多类。我们正在使用自动加载器,以便于加载类,这很棒。但麻烦就来了。

我们在整个应用程序中散布着大约 300 个页面,并且所有页面在最开始都需要一个 PHP 文件(一种引导脚本)。该 Bootstrap 文件中需要自动加载程序脚本。

现在,我们的大部分页面将使用至少一个类,但可能是许多类。我们知道这里有两个选择:

//either call the classes using qualified names
$person = new Project\Person;

//or include the "use" keyword on every page, so we can alias the classes for ease of use
use Project\Person as Person;
$person = new Person;

但麻烦的是,我们真的不想在应用程序的每个页面上都这样做:
require_once('../php/bootstrap.php');
use Project\Person\ as Person,
Project\Address\ as Address,
Project\Group\ as Group
Project\CustomField\ as CustomField;
$person = new Person;
$address = new Address;

我们尝试过,为了它,在引导文件中包括我们所有类的 use 关键字,但根据 PHP 手册,“导入规则是基于文件的,这意味着包含的文件不会继承父文件的导入规则。”

似乎在我们应用程序的每一页上都包含这些庞大的 use 语句会带来更多的麻烦。如果我们在一页上使用 15 个类呢?那么 use 语句将是巨大的。

我的问题是:是不是太麻烦了?我们使用命名空间是否正确,或者它在 PHP 中不是很有帮助?现在知道我们要做什么,我们做得对吗?有什么我们遗漏的吗?我们是否应该一直使用完全限定名称来调用类?

(这是我在 stackoverflow 上的第一个问题,所以如果我以后需要对我的问题做不同的或更好的事情,请告诉我)

最佳答案

虽然使用 vanilla Zend Framework Autoloader 可能不是您想要的方式,但 Zend Loader 确实支持自定义自动加载器,它可以尊重在运行时内嵌或动态指定的命名空间。就您而言,您使用的是 use Project\Person\ as Person正如您已经注意到的那样,这可能会变得很麻烦。

将命名空间与自动加载器一起使用将允许您利用使用简单路径遍历的自动加载来组织类,而不必为了到达有趣的部分而附加大路径。

所以,而不是 new Corp_Assets_Generic_Person_Address ,您可以保留文件夹结构并使用 new Namespace_Person_Address .

命名空间避免类名冲突。特别是在实现需要加载 的自动加载器的大型应用程序中。右 来自许多不同库的类。使用较短的类名会使代码更易于阅读,但可能会使维护变得更加困难。添加 use语句使阅读和后期维护更容易,但编写和重构会很麻烦。我的建议是记录自动加载器的预期行为并使用自定义自动加载器使类名更具可读性。

关于php - 在每个页面上使用 spl_autoload 而不使用关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com