问题标签 [spl-autoloader]

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 投票
2 回答
3786 浏览

php - SPL 自动加载最佳实践

在服务器端的 include_path 中,我引用了 pear 目录,位于“/usr/share/pear/”中。在我的应用程序中,我包含来自公共库的文件,这些文件位于 '/usr/share/pear/library/' 中,带有require_once 'library/file.php'.

我最近开始使用 spl 自动加载器,我注意到在加载器函数中你必须确定包含文件的逻辑。我这样做的第一种方法是尝试包含一个文件并抑制它@以查看它是否会失败,例如,@include 'library/file.php'但我认为主要是因为我阅读了很多关于@这是一种不好的做法的信息,我决定自己手动完成这项工作get_include_pathPATH_SEPARATOR并查看目录是否是我想要的目录,然后执行file_exists并包含它。

像这样:

我走错路了吗?我应该刚刚完成这项@include业务,还是我在某种程度上朝着正确的方向做这件事?

0 投票
3 回答
4881 浏览

php - PHP spl_autoload

我真的没有得到 spl_autoload 的文档

据我了解,当 php 遇到尚未加载的类时,它将尝试运行注册的函数。例如,

会导致要求运行吗?所以我也可以注册许多自动加载功能?

在教义的情况下,

传递了一个数组,所以我猜它会尝试在 Doctrine 类中运行自动加载函数(这是必需的)?

0 投票
3 回答
13632 浏览

php - 使用 spl_autoload() 无法加载类

我正在使用 SPL 自动加载功能,并且似乎缺少一些重要的东西,因为我目前无法让它工作。这是我目前正在使用的片段:

当我echo get_include_path()得到我期望的路径时:

但是,当我运行代码时,我收到此错误消息:

致命错误:spl_autoload() [function.spl-autoload]: Class Request could not be loaded in /home/someuser/public_html/subdomains/test/contact.php on line 5

Request.class.php肯定在 /home/someuser/public_html/subdomains/test/includes/classes/ 目录中。

我错过了什么?

0 投票
2 回答
1535 浏览

php - spl_autoload_register 未初始化自动加载堆栈

我正在尝试将SwiftMailer php 库与我编写的程序一起使用。在包含这个库之前,我一直在使用 spl_autoload_register() 函数。然而,在使用这个库之前,我使用 spl 函数明确定义了类扩展和位置:

我遇到的问题是,现在我正在尝试使用一个不遵循相同命名约定的库。他们自己的自动加载类(由对库的初始调用构建)看起来像这样。

}

当我在调用他们的课程后尝试简单地运行程序时,我得到:

第 30 行:

我曾尝试使用仿照他们的自定义自动加载类,但是,当我尝试时,我得到的只是:

结果:

我知道这必须是一个相当简单的问题,我忽略了一些东西,但我找不到它。

任何帮助将不胜感激。

0 投票
1 回答
8341 浏览

php - 使用 SplClassLoader 自动加载 PHP?

我正在学习 PHP 5.3 中的命名空间,我想使用命名空间自动加载。我找到了这个SplClassLoader 类,但我不知道它是如何工作的。

假设我有这样的目录结构:

如何启用类自动加载?应该request.phpresponse.php有哪些命名空间?

这是request.php

这是response.php

index.php我有:

我收到此错误消息:

为什么这不起作用?我如何SplClassLoader在我的项目中使用它以加载/需要我的类,以及我应该如何设置和命名文件夹和命名空间?

0 投票
1 回答
860 浏览

php - 单身, 工厂, 自动装载机

如果使用自动加载器功能(使用 spl_autoload_register),是否需要:

  • 单例:无论如何,所有需要的类都将由自动加载器加载,包括数据库、日志、r&r、fronts 等。所以需要“永远在线”等对象我不清楚
  • 工厂:再次,自动加载器将加载所需的类,所以有没有一点使用工厂类来实例化实现接口的工人类,或扩展抽象类
0 投票
1 回答
88388 浏览

php - 如何使用 spl_autoload() 而不是 __autoload()

根据http://php.net/manual/en/language.oop5.autoload.php,魔术函数__autoload()自 PHP 7.2.0 起已弃用,并从 PHP 8.0.0 起删除。

官方的替代方案是spl_autoload(). 请参阅http://www.php.net/manual/en/function.spl-autoload.php。但是PHP手册并没有说明这个宝贝的正确使用方法。

我的问题:如何用一个版本替换这个(我的自动类自动加载器)spl_autoload()

问题:我无法弄清楚如何为该函数提供路径(它只接受名称空间)。

顺便说一句,这里有很多关于这个主题的主题,但没有一个提供一个干净简单的解决方案来取代我性感的单线。

0 投票
1 回答
1580 浏览

php - 如何在自定义命名空间中使用 PEAR 库?

当我声明了我的自定义命名空间时,我不能使用 PEAR 库。

命名空间和自动加载功能:

如果我尝试这样的 ROOT_DIR/inc/ldapwrangler/LDAP.class.php:

我收到这样的错误:

5 月 29 日 10:03:32 reagand-desktop apache2: PHP 致命错误: require_once(): 无法打开所需的 '/home/reagand/dev/ldap_wrangler/inc/ldapwrangler/Net_LDAP2.class.php' (include_path='.:/ usr/share/php:/usr/share/pear') 在第 18 行的 /home/reagand/dev/ldap_wrangler/config.php

仅供参考,第 18 行是 autoload 函数的 require_once() 部分。

如何告诉 php 不要为 Net_LDAP2 类使用 ldapwrangler 命名空间?或任何其他非 ldapwrangler 类,就此而言。

0 投票
1 回答
537 浏览

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

我对 PHP 中的自动加载器和命名空间感到有些困惑。

我的课程组织在一个资产文件中,

这只是一个简单的版本,每个文件夹中有更多的文件(即用户、数据库)。

无需担心供应商名称冲突,因为该项目中只有一个供应商(即我),但例如,使用 PSR0 自动加载器:

我是否需要在每个类文件中声明一个命名空间并使用new user\User();. 是不是可以通过使用来初始化它new user_User;

非常感谢

0 投票
1 回答
5054 浏览

php - PHP Autoloader 添加命名空间路径

我的 MVC 结构如下:

现在我为每个指定了命名空间。例如我有

我的自动加载器看起来像这样:

和我的主要 index.php 使用

当我打开 localhost/web/ 时,出现以下错误:

它似乎将 Core/ 添加到请求的文件中。Index.php 在 Project/Controllers 中,而不是在 Core/Project/Controllers 中。如果我尝试删除

请帮忙