问题标签 [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 投票
1 回答
1626 浏览

php - PHP AWS SDK 自动加载器与 Codeigniter 冲突

  • 我正在使用 Codeigniter 2.1.0。
  • 我正在使用自定义模型中包含 Amazon Web Services SDKrequire_once APPPATH . "/libraries/aws_sdk/sdk.class.php";

这很好用。然而,当 CI 决定稍后需要加载它的数据库缓存类时,它会调用(通过 CI_DB_driver::_cache_init):

这会触发 AWS 开发工具包的自动加载(确切的方法是CFLoader::autoloader)。

我可以通过告诉不要自动加载来解决这个问题,因为如果返回 false class_exists,似乎无论如何都会包含 DB_cache.php :class_exists

这种肮脏的修复工作,但显然只能解决眼前的问题。一般来说,确保 CodeIgniter 不会与其他库的自动加载混淆的最佳方法是什么?

请注意:

  • 我已经阅读了有关使用spl_autoload_register. Codeigniter 似乎没有使用它,我不确定我应该如何安全地实现它。我会找到一个可靠的例子来说明我应该如何以及在哪里实现这个最有用的(当然,如果这是解决方案)。
  • AWS 开发工具包似乎已经使用spl_autoload_registerspl_autoload_register(array('CFLoader', 'autoloader'));
0 投票
0 回答
201 浏览

php - spl_autoload_register() 在不同的开发环境中调用方式不同,搞乱了对象继承

好的,所以我有一个使用 CodeIgniter 的 Web 应用程序。

我已经用 MY_Controller 扩展了基本控制器。我使用了一种自动加载方法,以便能够使用另一个基类 SC_Contoller 扩展 MY_Controller。

我已经使用其他用户可访问的(在“核心”文件夹之外)控制器扩展了 SC_Controller。在我的本地开发系统上可以很好地访问它们。另外,我可以看到我的自动加载器函数被调用来加载其中包含“SC_Controller”的文件。这是对的。

但是,一旦加载到服务器上,事情就会出错:用户可访问的扩展控制器可用(这意味着父级 MY_Controller->SC_Controller 也已加载),但我的自动加载器函数从未被调用。此外,这些控制器不继承其父类的任何成员!

事实上,如果我打电话,get_class_methods($this)我只看到本地成员。如果我调用get_class_methods("SC_Controller")它只返回构造函数。当我在本地机器上进行这些调用时,会列出整个成员方法数组(包括所有继承的方法)。

这可能是什么原因造成的?是的,我的服务器上存在 SPL。

0 投票
3 回答
1166 浏览

php - PHP:如何使用 :: 而不是 \ 访问命名空间类?

namespace在下面这样的课程中使用,

class_tidy.php,

索引.php,

它工作得很好,但我想知道我是否可以访问该课程,而不是,

但,

哪个看起来更漂亮。但有了这个错误,

解析错误:语法错误,意外的 T_STRING,期待 T_VARIABLE 或 '$' ...

0 投票
1 回答
683 浏览

php - 使用 spl_autoload_register 的自动加载问题

首先,我想告诉你我的目录结构

在我的 index.php 中,我包含 application/framework.php 这是我的 framework.php 代码

现在使用上面的代码,自动加载我的类工作正常。如果您想知道 $method 和 $controller 来自 index.php,具体取决于 URI。

现在我的一个朋友告诉我这是错误的做法,所以我将代码更改为

现在我在下面收到此错误

我该如何解决这个问题,我已经在这几个小时了,如果可能的话,请告诉我如何使用自动加载从控制器类内部的模型目录中调用模型谢谢

0 投票
1 回答
198 浏览

php - PHP 命名空间和自动加载

我对 PHP 比较陌生,或者对至少有点复杂并且有很多类的项目更加指定新。到目前为止,使用 require_once 是可以的。然而,在一个新项目中,它变得有点混乱,包含大量并非总是需要的。

我正在创建的是一个复杂的公共 Web 服务的客户端(这不在我的控制范围内)。然后该客户端将在应用程序中使用。

我查看了 spl_autoload_register 但并没有真正让它工作。这个项目的目录是:

假设将直接由使用的应用程序使用的客户端类在

该类必须“加载”所有可能的必需类。我怎样才能做到这一点?

0 投票
2 回答
29776 浏览

php - 如何使用 spl_autoload_register?

假设我有一些类似上面的代码。我选择使用加载类的匿名函数方法,但是这个是怎么用的呢?它究竟如何确定'$class'要加载哪个?

0 投票
1 回答
903 浏览

php - PHP:使用自动加载器导致我的数据库类失败

我有一个通过spl_autoload_register. 它很好地包含和初始化类,但是当涉及到我的数据库类时存在问题。

这是连接类(DbConnect.php):

和数据库类(Db.php):

初始化类工作正常,但每当我进行数据库查询时,它都会失败:

我收到以下错误:

警告:call_user_func_array() 期望参数 1 是有效的回调,第一个数组成员不是 Db.php 第 114 行中的有效类名或对象

绑定错误:未选择数据库

注意:尝试在第 169 行获取 Db.php 中非对象的属性

0 投票
2 回答
3413 浏览

php - `spl_autoload_extension()`和`spl_autoload_register()`的用法是什么?

我正在使用spl_autoload_register()函数来包含所有文件。我希望任何具有扩展名.class.php.php将直接包含的类。我做了下面的课程并注册了两个不同的功能,一切正常,但是

我认为有一些方法可以让我只需要注册一个函数就可以将两个扩展包含在一起。

请查看我的功能并告诉我我缺少什么

我的文件夹结构

自动加载.php

注意:对线没有影响spl_autoload_extensions();。为什么?

我也读了这个博客,但不明白如何实现。

0 投票
0 回答
662 浏览

php - spl_autoload_register 错误而不是 __autoload

我有点困惑。

到目前为止,我在 PHP 中使用 __autoload,并且我也在使用会话。这两件事一起工作得很好,当我在会话中存储一些对象时,__autoload 函数已经毫无问题地加载了相应的类。

不,我正在“更新”我的主脚本,并且想将 __autoload 函数更改为 spl_autoload_register 函数,因为 php 手册说,将来可能会弃用 __autoload。

但是现在,我有一些问题。spl_autoload_register 适用于所有类,我在脚本中以“正常”方式使用它们,但是当我将对象存储在会话中时,spl_autoload_register 无法加载这些类。

当我查看带有 json_encode($_SESSION) 的会话时,会出现如下内容:

使用 __autoload 没问题...

我的职能:

我试图将其替换为:

我正在使用 PHP 版本 5.3.3-7

有人可以重现这个错误吗?到目前为止,这可能是 PHP spl_autoload_register 中的一个错误吗?到目前为止,__autoload 是“更好”的功能吗,而 spl_autoload_register 到目前为止还不能与会话一起使用吗?

0 投票
2 回答
857 浏览

php - 使用 SPL_AUTOLOAD_REGISTER 时命名空间如何工作?

我今天正在学习如何使用命名空间和自动加载PHP,我似乎遇到了障碍。当我不使用spl_autoload_register但相反时,事情似乎起作用了require_once

我的文件夹结构很少:

在我的index.php文件中,我有:

在我的class/Users.php文件中,我有:

这工作得很好,返回的ID1

理想情况下,我会想使用自动加载功能,我发现spl_autoload_*这是我试图做的,但没有成功:

在我的class/Users.php文件中,我有:

在我的index.php文件中,我有:

但我收到一个错误:

不太确定我做错了什么。