问题标签 [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.
php - SPL 自动加载最佳实践
在服务器端的 include_path 中,我引用了 pear 目录,位于“/usr/share/pear/”中。在我的应用程序中,我包含来自公共库的文件,这些文件位于 '/usr/share/pear/library/' 中,带有require_once 'library/file.php'
.
我最近开始使用 spl 自动加载器,我注意到在加载器函数中你必须确定包含文件的逻辑。我这样做的第一种方法是尝试包含一个文件并抑制它@
以查看它是否会失败,例如,@include 'library/file.php'
但我认为主要是因为我阅读了很多关于@
这是一种不好的做法的信息,我决定自己手动完成这项工作get_include_path
。PATH_SEPARATOR
并查看目录是否是我想要的目录,然后执行file_exists
并包含它。
像这样:
我走错路了吗?我应该刚刚完成这项@include
业务,还是我在某种程度上朝着正确的方向做这件事?
php - PHP spl_autoload
我真的没有得到 spl_autoload 的文档
据我了解,当 php 遇到尚未加载的类时,它将尝试运行注册的函数。例如,
会导致要求运行吗?所以我也可以注册许多自动加载功能?
在教义的情况下,
传递了一个数组,所以我猜它会尝试在 Doctrine 类中运行自动加载函数(这是必需的)?
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/ 目录中。
我错过了什么?
php - spl_autoload_register 未初始化自动加载堆栈
我正在尝试将SwiftMailer php 库与我编写的程序一起使用。在包含这个库之前,我一直在使用 spl_autoload_register() 函数。然而,在使用这个库之前,我使用 spl 函数明确定义了类扩展和位置:
我遇到的问题是,现在我正在尝试使用一个不遵循相同命名约定的库。他们自己的自动加载类(由对库的初始调用构建)看起来像这样。
}
当我在调用他们的课程后尝试简单地运行程序时,我得到:
第 30 行:
我曾尝试使用仿照他们的自定义自动加载类,但是,当我尝试时,我得到的只是:
结果:
我知道这必须是一个相当简单的问题,我忽略了一些东西,但我找不到它。
任何帮助将不胜感激。
php - 使用 SplClassLoader 自动加载 PHP?
我正在学习 PHP 5.3 中的命名空间,我想使用命名空间自动加载。我找到了这个SplClassLoader 类,但我不知道它是如何工作的。
假设我有这样的目录结构:
如何启用类自动加载?应该request.php
和response.php
有哪些命名空间?
这是request.php
:
这是response.php
:
在index.php
我有:
我收到此错误消息:
为什么这不起作用?我如何SplClassLoader
在我的项目中使用它以加载/需要我的类,以及我应该如何设置和命名文件夹和命名空间?
php - 单身, 工厂, 自动装载机
如果使用自动加载器功能(使用 spl_autoload_register),是否需要:
- 单例:无论如何,所有需要的类都将由自动加载器加载,包括数据库、日志、r&r、fronts 等。所以需要“永远在线”等对象我不清楚
- 工厂:再次,自动加载器将加载所需的类,所以有没有一点使用工厂类来实例化实现接口的工人类,或扩展抽象类
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()
?
问题:我无法弄清楚如何为该函数提供路径(它只接受名称空间)。
顺便说一句,这里有很多关于这个主题的主题,但没有一个提供一个干净简单的解决方案来取代我性感的单线。
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 类,就此而言。
php - PHP 自动加载器和命名空间
我对 PHP 中的自动加载器和命名空间感到有些困惑。
我的课程组织在一个资产文件中,
这只是一个简单的版本,每个文件夹中有更多的文件(即用户、数据库)。
无需担心供应商名称冲突,因为该项目中只有一个供应商(即我),但例如,使用 PSR0 自动加载器:
我是否需要在每个类文件中声明一个命名空间并使用new user\User();
. 是不是可以通过使用来初始化它new user_User;
非常感谢
php - PHP Autoloader 添加命名空间路径
我的 MVC 结构如下:
现在我为每个指定了命名空间。例如我有
我的自动加载器看起来像这样:
和我的主要 index.php 使用
当我打开 localhost/web/ 时,出现以下错误:
它似乎将 Core/ 添加到请求的文件中。Index.php 在 Project/Controllers 中,而不是在 Core/Project/Controllers 中。如果我尝试删除
请帮忙