问题标签 [autoload]

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 投票
4 回答
2293 浏览

php - __autoload 灾难 - 与 Joomla 冲突

我刚刚更改了所有代码以使用 __autoload 发现它与 joomla 自动加载器冲突。在某些情况下,我将我的应用程序与 joomla 集成以注册用户等。

我发现 spl_autoload_register() 显然允许许多自动加载器。

我应该怎么办?

更新:这就是 joomla 所做的

从 /library/loader.php 加载这个文件

更新 2:

好的,在我加载我调用的 Joomla 库之后

这是我的自动加载的样子:

我的首先被调用,然后 joomla 被调用,但是,该应用程序仍然找不到 Joomla 类。

更新 3:

运行后:

我的输出是:PRE:myAutoload:POST:myAutoload:Array

更新 4:

我不得不将 Joomla 导入更改为:

这是输出

在我包含这些 Joomla 文件后,我已经解决了

spl_autoload_functions() 什么都不返回,所以 joomla 不知何故把它填满了。

0 投票
2 回答
920 浏览

php - Zend Framework:从另一个目录加载模块

嘿,伙计们,这是我关于 Stack Overflow 的第一个问题。我认为这个网站对我有很大帮助,所以我也试一试。

我目前正在开发多个需要从公共模块目录继承模块的 Zend Framework 应用程序。使用的文件结构是常规方法(省略实际名称和引用以保护应用程序结构):

现在我已经尝试在 Application2 的引导程序中手动自动加载每个模块,如下所示:

这行得通,但正如您可以想象的那样,这将成为一项相当乏味的工作。现在我也尝试在 FrontController 中设置公共模块目录,如下所示:

但这似乎并没有引导任何模块。我是否忘记了一些重要的事情?非常感谢您的帮助!

0 投票
1 回答
241 浏览

php - PHP 命名空间:函数加载

我想在 PHP 中玩一下函数式编程。我认为总是在 php 中编写 oop 时尝试一些不同的东西很有趣。

但是,我想使用命名空间。我的命名空间等于文件结构:

命名空间我\模型\用户;

/my/Models/User.php

他们是为此做自动加载之类的方法吗?我想必须同时写 use 和 require_once 吗?

最好的问候,塞巴斯蒂安

0 投票
1 回答
192 浏览

php - 让 Textmate 从文件路径创建 PHP 自动加载类名

我想要的是一个片段,在执行时,它会抓取 TM_FILEPATH 输出在斜杠上分解它/然后将每个部分拆分为包含该部分和下划线的占位符(除了最后一部分(文件名))例如:对于我们会得到目录路径 /Path/To/Original/file 中的文件

然后我可以逐步删除并删除我不想以适合标准 PHP 自动加载器的类名结尾的部分

这听起来可能吗?

干杯,克里斯

0 投票
2 回答
14017 浏览

ruby-on-rails-3 - Rails 3:如何在 /lib 中加载文件?

我是 Rails 新手,犯了一些菜鸟错误:我经常需要计算文件中的行数,所以我试图像这样对类 File 进行修补:

我将它保存到 /lib/file_util.rb。我认为这应该是自动需要的,这样我就可以使用它,但这不起作用:

所以我尝试手动要求它,不高兴:

但如果我在 IRB 中需要它,它会起作用:

我还尝试将要求添加到 config/application.rb:

我得到:

我究竟做错了什么?

0 投票
3 回答
8612 浏览

php - PHP自动加载:防止'无法重新声明'在所有星座中?

问题

有没有一种方法可以让 PHP忽略类的重新声明而不是抛出一个 FATAL ERROR?或者至少抛出一个异常?(然后我可以轻松地抓住它并继续(以及记录尝试的自动加载)。)

我猜不是,一个致命错误是一个致命错误——毕竟,在 100 个案例中有 99 个,这是相当明智的行为——我可能只需要修复它在案例中触发的实例——以个案为基础。但也许比我聪明的人已经想通了。


如果你问自己“你到底为什么要这么做? ”,请继续阅读。

背景

我正在开发一种工具,该工具使用反射来聚合有关使用的函数和类的特定信息。脚本的参数之一是一个可选的引导文件,以使反射在自动加载时更加可靠(更少ReflectionExceptions最终被捕获并触发回退启发式,因为特定文件中的类是未知的)。

现在,引导程序很好地加载了自动加载器,并且脚本按预期运行,毫无怨言地通过数百个文件,直到我遇到障碍:

PHP 致命错误:无法在第 62 行的 /usr/share/php/PHPUnit/Framework/Constraint.php 中重新声明类 PHPUnit_Framework_Constraint

我有两个问题:

一,我不知道是什么触发了这个。我已经调整了使用的引导程序,但仅在“无法重新声明”和“无法打开文件”之间交替,具体取决于使用的包含路径。没有中间地带,即没有不发生错误的点。不过,我还在调查。(不过,这个问题不是问题所在。)

二,更重要的是,并导致这个问题的主题,我需要一种方法来抓住它。我试过编写一个自定义错误处理程序,但它似乎不想为Fatal errors 工作(有点明智,有人可能会争辩)。

我打算在某个时候将该工具发布到开源世界中,这让我觉得这是一种非常不可接受的行为。对于不存在的类,我有一个后备启发式 - 我宁愿他们被声明一次太少而不是一次太频繁,但不要过度使用启发式,也就是说,我确实想提供使用引导程序的能力。在不破坏脚本的情况下。曾经。即使它是自动加载器历史上最糟糕的自动加载器。

(强调一下:我不想帮助我的自动装载机。这不是这个问题的目的。

0 投票
2 回答
1517 浏览

zend-framework - Zend 框架在我的动作控制器中包含另一个类

我是zend框架的新手,

一个简单的问题:

在我的 IndexController 文件中,我想实例化新类。

我把类声明文件放在/library下

当然它在包含路径中(index.php)

我收到一个错误:

自动加载此类的方法是什么?

谢谢!

0 投票
1 回答
231 浏览

php - require_once 问题

我在 __constructor 中有这段代码

问题:我遇到了一个意想不到的奇怪错误:

我正在使用“__autoload”方法来调用所需的类,但是当我在ModalBOX窗口中调用文件时它不起作用。如果我请求 ModalBox 之外的文件,一切都很好:(

一些技巧来解决它?

非常感谢你!

附言

这是 __autoload 方法:

否则返回假;}

0 投票
2 回答
1448 浏览

php - PHP __autoload() 可以从同一类的另一个 __autoload() 中的一个类吗?

好的,这是一个艰难的问题......我想,我觉得答案是否定的,但在这种情况下,我想要一些替代方案的答案。

我在一个可以动态创建类的框架中有一个非常复杂的 __autoload() 函数。为了动态创建一个名为 AuthActions 的类,需要三个类——这三个是:fRecordSet、RecordSet 和 AuthAction(注意那个没有 S)。

我的自动加载器将在它加载的任何类上寻找一个静态方法“init”并尝试运行它。在我的 ActiveRecord 类中,它尝试使用 AuthActions 来获取特定活动记录上支持的操作列表。AuthAction(没有 S)也在它的 init 中调用 AuthActions,所以基本上加载了 Active Record,并尝试加载 AuthActions,触发其他三个的加载,然后当它完成加载 AuthAction 时仍在原始自动加载器中 AuthAction 尝试调用AuthActions 触发另一个自动加载,因为原始的尚未完成。

这会导致以下内容有一些回声语句来澄清:

尝试加载 ActiveRecord
尝试加载 fActiveRecord
fActiveRecord 通过 /var/www/dotink.org/inkwelldemo/inc/lib/flourish
加载 ActiveRecord 通过 /var/www/dotink.org/inkwelldemo/inc/lib 加载
尝试加载 AuthActions
尝试加载 RecordSet
尝试加载 fRecordSet
fRecordSet 通过 /var/www/dotink.org/inkwelldemo/inc/lib/flourish
加载 RecordSet 通过 /var/www/dotink.org/inkwelldemo/inc/lib 加载
尝试加载 AuthAction
AuthAction 通过 / 加载var/www/dotink.org/inkwelldemo/models

致命错误:在第 24 行的 /var/www/dotink.org/inkwelldemo/models/AuthAction.php 中找不到类“AuthActions”

这里的问题是,对 __autoload('AuthActions') 的后续调用会成功,因为它需要的三个类现在已经到位......但它似乎只在它已经尝试自动加载'AuthActions'的前提下死了——这似乎是写在 PHP 中的。

在测试这个我发现以下将永远循环没有错误:

虽然下面的这个会出现类似的错误:

这种行为似乎不一致,因为本质上它们应该等同于同一件事(有点)。如果 PHP 内部触发的自动加载就像用户对 __autoload() 的调用一样,我认为我不会有问题(或者如果我这样做了,那将是它永远循环的问题,这将是一个单独的问题,以确定为什么类没有被加载来解决依赖关系)。

简而言之,我需要一种方法来递归循环基于 PHP 触发的自动加载的自动加载器......这根本不可能吗?这可能是我的特定版本中的错误吗?在我的测试中,它似乎影响了 5.2.6 - 5.3.2,所以我无法想象这是一个整体的错误。

更新:

AuthAction 上的 init method() 代码如下:

您可以看到它在哪里调用 AuthActions 作为一个单独的类,请注意,这只是因为它是在最初的加载尝试中加载的,所以它失败了。我显然可以删除这段代码,它会起作用——AuthActions 的原始加载将成功完成,因为所有先决条件类都被加载。

也就是说,init() 是这段代码最合适的地方,即使我无法使用尚未在 init() 中加载的相互依赖的类,我仍然希望保留该功能。实现该功能的任何替代方式都会很棒......理想情况下,PHP 会为此类事情提供事件,例如,当触发“自动加载”事件时,您可以注册回调。这将允许代码在原始自动加载之后运行,并解决这个看似毫无意义的限制。

话虽如此,任何关于如何在每次加载类时自动调用 init() 的建议都受到赞赏和欢迎。

0 投票
4 回答
10091 浏览

javascript - 如何在 jqGrid 中禁用自动加载?

如何在 jqGrid 中禁用自动加载并在需要时手动加载数据?

谢谢。