问题标签 [spl-autoload-register]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
902 浏览

php - spl_autoload_register() 与子文件夹结构匹配命名空间

我决定重写项目中当前存在的自动加载器,用 spl_autoload_register() 替换旧的 __autoload()。在寻找最佳解决方案时,我在php.net上找到了这个最受好评的评论,其中指出:

对于使用命名空间类的 PHP 5.3 用户来说是个好消息:

当您创建与包含类的名称空间匹配的子文件夹结构时,您甚至不必定义自动加载器。

所以基本实现很简单:

并且添加具有相同命名空间的子文件夹可以最大限度地减少启动操作的数量:

虽然这看起来小而快,但问题是:

这个解决方案将来会导致什么大问题吗?因为,例如,Zend/Symphony 加载器要复杂得多,我相信这是有充分理由的。

(例如,向命名空间添加“供应商”前缀 - 根据 PSR-0 - 可能有点问题,因为它也应该匹配目录 - 一个 webroot 目录)

希望收到任何建设性的观点。谢谢你。

0 投票
1 回答
1373 浏览

php - 无法重新声明类:如果文件夹中已经存在类,如何自动加载?

如何检查一个文件夹中是否已经存在一个类,然后不要从另一个文件夹再次加载这个类?

例如,我有这个文件夹结构,

我有这两个相同的类code/local/

来自本地/

从核心,

所以我需要一个脚本来检测 Article 的类local/-如果它已经在该文件夹中退出,则不要从core/文件夹再次加载该类。是否可以?

这是我index.php用于加载类的自动加载功能,

当然我得到这个错误,

class_exists似乎是我应该研究的答案,但是如何将它与上面的函数一起使用,尤其是spl_autoload_register. 或者如果你有更好的想法?

0 投票
3 回答
2573 浏览

php - spl_autoload_register() 在不同的目录

我有一个自动加载我的每个类的文件。这是它包含的内容:

但是,当我从我的ajaxrequire_once文件夹中的另一个 php 文件中获取此文件时,它会尝试查找classes,该函数将从我的 classes 中查找路径:而不是.main_folder/ajax/classesmain_folder/classes

有谁知道如何解决这一问题 ?

修复

0 投票
1 回答
1808 浏览

php - 使用命名空间时,PHP spl_autoload_register 无法加载具有要求范围的类

好的!!!现在,我不知道为什么 spl_autoload_register() 无法加载类。

我的文件夹结构是这样的..

  • 应用

    • 控制器
      • 欢迎.php
  • 系统

      • 基本控制器.php
      • 加载.php
  • 索引.php

我的 BaseController.php 代码

我的 Load.php 代码

我的welcome.php 代码

我的 index.php 代码

当我执行此代码(index.php)时,出现以下错误...

但是,如果我从 Load.php 中删除命名空间,我不会收到任何错误。我无法理解为什么该名称空间(在 Load.php 中使用)会产生错误。

任何想法...

问候

0 投票
1 回答
243 浏览

php - spl_autoload_register 如何在 Netbeans Todo 示例 php 应用程序中工作?

我正在查看 Netbeans 中 Todo App 的示例代码。谁能在这里向我解释 spl_autoload_register 函数的使用:

这是自动加载功能

这里 init 函数声明 loadClass 以加载类。

这里调用了 init 并且 spl_autoload_register 调用了 loadClass。

我的问题是它如何加载 $classes 数组中的所有类,因为 $name 没有定义或作为参数传递?

0 投票
1 回答
480 浏览

php - 是否可以在 spl_autoload_registry 中扩展具有相同类但路径不同的命名空间类

我有两个命名空间类,它们加载了具有相同命名空间和类的作曲家。(PSR4)

我有第二个目录具有相同的名称空间用于覆盖。

现在,如果我将 directory1 和 directory2 都注册为自动加载程序,则 directory2 将优先于 directory1。使用这种方法,我可以通过备用目录完全覆​​盖类。

调用 new Foo\Bar 时;

我会得到一个 directory2/Foo/Bar.php 的实例

如果文件没有在第二个目录中退出,我将得到一个实例:

我会得到一个 directory1/Foo/Bar.php 的实例

这很棒,但我有一个问题。

虽然我可以完全覆盖,但似乎不可能扩展以这种方式设置的类。

在 directory2/Foo 中找到的 Bar 是否可以扩展在 directory1/Foo 中找到的 Bar,因为它们共享名称空间和类名?

0 投票
3 回答
2197 浏览

php - spl_autoload_register 加载类两次

我一直想知道这个非常简单的类加载器脚本有什么问题。类加载器如下所示:

最初的类加载器有更多的方法和一些函数来验证文件名……但是,在调试过程中,我不得不把它缩小到那个范围。

因此,文件中需要该类加载器autoload.php,如下所示。

FooClass.php位于_src/Foo/FooClass.php

自动加载部分实际上没有问题,类加载得很好,但它完成了两次,这向我显示了以下错误。我从index.php文件中调用它

只是使用它会产生这个错误。

致命错误:无法在第 4 行的 /path/to/index.php 中重新声明类路径\foo\FooClass

0 投票
2 回答
613 浏览

php - 带有命名空间 php 的 spl_autoload

我正在为由 nodejs 外部进程运行的计划作业制作一个小框架。我想使用自动装载机,但由于某种原因数据无法到达。我也在使用命名空间。这是我的文件夹结构的样子:

Config.php只是有一些定义和我的Loader.php.

Loader.php 看起来像:

因此,对于我来说,我将其SomeJob.php包括在内Config.php,然后在 JobConfig.php 失败时尝试实例化它。我的命名空间看起来像Library\Core\JobConfig等等。我不确定这是否是没有能力引导事物的最佳方法。但是在加载失败之前我没有看到来自加载器的回声。

编辑:

我尝试了@Layne 的建议,但没有奏效。我仍然找不到一个类,并且似乎没有进入 spl 堆栈的类。是代码的链接

0 投票
1 回答
587 浏览

php - 这个自动加载器只加载第一个类

我有以下自动加载器,由于某种原因只加载第一类。

这是自动加载器类

虽然上述方法有效,但一次只加载一个类。所以,在下面的例子中。对于每个注册的路径/类,只有第一个才会被加载。

这可能是什么问题?

0 投票
1 回答
1079 浏览

php - 通过 composer 自动加载多个 PHP 项目

假设我的文件夹布局为

这些项目需要处于同一级别,并且需要彼此共存,例如projectA可能使用来自projectBand的代码projectC,反之亦然,因此不能将它们放入vendor文件夹中。

问题是:autoload.php在每个项目中都能够自动加载自己的src文件vendor夹,但是如何为其他项目自动加载呢?

假设他们邻居的项目将文件夹名称作为 PHP 命名空间,是否可以设置一个 autoload.php(通过作曲家),以便将来当我添加新项目文件夹时,自动加载会神奇地工作?