autoload 相关问题

autoload是一种语言约定,允许按需加载缺少的类或方法依赖项。

如何在 Composer 中根据需要自动加载辅助函数?

假设每个函数有 1 个文件: /src/Helpers/fooHelper.php 假设每个函数有 1 个文件: /src/Helpers/fooHelper.php <?php namespace MyHelper; function fooHelper() {}; /src/Helpers/barHelper.php <?php namespace MyHelper; function barHelper() {}; 我看到有 "autoload": { "files": ["src/Helpers/functions.php"] } 是否可以通过 Composer 按需自动加载这些函数,而不是每次请求? 是否可以通过 Composer 按需自动加载这些函数,而不是每次请求? 不,PHP 中的函数不支持自动加载。您需要手动加载它们,或者将带有函数声明的文件添加到 autoload.files 中的 composer.json 配置中 - 即使您从不使用它,它们也会在每个请求上加载。 目前唯一明智的解决方法是将助手包装在某个静态类中,该静态类可以毫无问题地自动加载。 class MyHelper { public static function fooHelper() {} public static function barHelper() {} } MyHelper::fooHelper(); MyHelper::barHelper(); 我之前确实遇到过这个问题,并找到了一个简单的解决方案,我在几个项目中实现了这个问题,没有任何问题 我发现,如果类和函数命名空间匹配,可以在类的构造函数中定义函数。 我的解决方案: 函数文件myfunction.php namespace Foo; function myFunction(){ return "string"; } 某堂课: namespace Foo; class myClass{ public function __construct(){ include __DIR__.'myfunction.php'; } public function printFunction(){ echo myFunction(); } } 如果您想为每个帮助文件添加它,您应该执行以下操作: "autoload": { "files" : [ "path_to file_1.php", "path_to file_2.php", "and so on" ] } 运行命令后应该可以工作:composer dump-autoload或composer dumpautoload。

回答 3 投票 0

Rails 7 通过引擎将方法自动加载到控制器中

我正在考虑将我最喜欢的 CMS 之一更新到 Rails 7,该 CMS 已存档在 github (PushType) 上。只是自从 Rails 6 以来我就没有编写过 Rails 代码了。显然,有一些关于自动加载方法的事情

回答 1 投票 0

AutoLoader 带有大量空镶木地板文件

我想使用 Databricks 中的 AutoLoader 处理一些镶木地板文件(使用快速压缩)。其中许多文件都是空的或仅包含一条记录。另外,我无法改变它们的创建方式,...

回答 2 投票 0

Rails 7.1 解决了相互冲突的 Zeitwerk 变形规则

我有一个 Rails 7.1 应用程序和多个(Rails 引擎)Gems,它们的变形规则相互冲突。 app/controllers/gem1/api/gem1_controller.rb 下有 Gem1::Api::Gem1Controller 和 Gem2::API::

回答 1 投票 0

无法使用 spl_autoload_register 加载 PHP 中的类

我刚刚在编写 PHP 时遇到错误。问题是我在 init.php 文件中使用了 spl_autoload_register 但无法加载类文件夹中的类。我确定...

回答 1 投票 0

PHP 致命错误:未捕获错误:无法在 E: 中打开所需的 'new-project/vendor/autoload.php' (include_path='.;C:\php\pear') ew-项目 rtisan:18

我想由composer创建新的laravel项目。我使用composer create-project laravel/laravel new-project 命令来创建新项目。然后,我的项目是按照这张图片创建的。 我...

回答 2 投票 0

致命错误:无法使用简单的 php 博客重新声明 spl_autoload_register()

很多年前我的网站使用了一个简单的php博客平台,这使用了旧的__autoload函数。我最近不得不迁移主机,他们使用较新版本的 php,因此该功能不再

回答 1 投票 0

如何在自动加载器上启用模式演化

我想在自动加载器上进行 schemaEvolution,以便在新列到达和摄取时添加新列 当我单击“显示”时,流应该会失败并告诉我有未知的列

回答 1 投票 0

尝试使用TYPO3 12 ActionController时出现ServiceNotFoundException

当尝试注册我的 DummyController 以将其用作 Typo3 插件时,我收到以下错误: ServiceNotFoundException:您请求了一个不存在的服务“MyVendorName\

回答 2 投票 0

命名空间自动加载在 mvc php 中不起作用

我遇到了名称冲突,因此决定使用命名空间,但我在尝试使用 psr-4 自动加载实现命名空间时遇到了问题。我观看了几个视频来学习并尝试......

回答 0 投票 0

PHP 自动加载器重复路径

我想学习 PHP 中的自动加载器,但我加载器将我的路径复制到我的文件,但它不起作用。 我想学习 PHP 中的自动加载器,但加载器将我的路径复制到我的文件,但它不起作用。 <?php function myAutoLoader($class){ $directories = [ __DIR__ . "/classes/account/", __DIR__ . "/classes/database/", ]; $extension = ".php"; foreach ($directories as $directory){ $fullPath = $directory . str_replace('\\', '/', $class) . $extension; var_dump($fullPath); if(file_exists($fullPath)) { require_once $fullPath; return true; } } return false; } spl_autoload_register('myAutoLoader'); 和我的课程,我想要获得路径吗: <?php namespace controllers; use classes\account\RegisterAccount; require_once __DIR__ . "/../includes/autoloader.php"; class RegisterController extends RegisterAccount 但是路径重复: 字符串(94)“C:\xampp\htdocs eservationSystem\includes/classes/account/classes/account/RegisterAccount.php" 字符串(95) 我的目录结构是: 项目/ ├── 课程/ │ ├── 帐号/ | ___注册帐户.php │ └── 数据库/ │ └── Connect.php └── 包括/ └── autoloader.php 我在 youtube 和 sof 上搜索答案,但没有找到解决方案。 传入自动加载器的$class是包含命名空间的类。 所以在你的情况下 $class 的值是 classes\account\RegisterAccount 所以你可以废弃这部分 $directories = [ __DIR__ . "/classes/account/", __DIR__ . "/classes/database/", ]; 所以你的函数应该是这样的 function myAutoLoader($class){ $extension = ".php"; $fullPath = __DIR__ . '/' . str_replace('\\', '/', $class) . $extension; if(file_exists($fullPath)) { require_once $fullPath; return true; } return false; }

回答 1 投票 0

Rails 7.0 升级:使用 Zeitwerk 自动加载

从经典自动加载器升级到现在使用 zeitwerk 时,自动加载模块时遇到问题。 目前我的模块如下: # 应用程序/lib/configuration/test_configuration 模块测试配置...

回答 1 投票 0

获取 PHP 命名空间(而不是类)的真实路径

我正在开发代码生成器,并且想要获取名称空间的路径。 也就是说,给定名称空间“App\Controller”,我想获取“src/Controller”。 我知道如何获取该信息...

回答 1 投票 0

PHP rawurlencode 函数的编码方式与浏览器不同

当我在浏览器中输入字符串 DIN 2080 Fräseraufnahmen SK 30 时,它会将其编码为 DIN%202080%20Fr%C3%A4seraufnahmen%20SK%2030,并且 API 可以正确读取该字符串。但是,在 PHP 脚本中...

回答 3 投票 0

使用 PSR4 自动加载作曲家

可能是一些微不足道的事情,但我在基本自动加载方面遇到了问题。我想创建沙箱项目只是为了测试新的解决方案,所以我创建了以下结构: 沙盒 |-index.php |-

回答 2 投票 0

Apache / Laragon + Composer 自动加载问题

我刚刚开始尝试创建一个简单的路由器(我尝试了几种解决方案,例如AltoRouter,但没有任何效果,我想开始一个非常简单的解决方案)。 Composer 自动加载无法到达

回答 1 投票 0

如何使用命名空间正确自动加载操作系统安全的类?

我正在寻找最干净、最优雅的方法来在 PHP 8 中构建操作系统安全的路径字符串,并将它们包含在我的自动加载函数中,如果可能的话,无需使用 str_replace() 或 substr() 。 我有一个文件结构...

回答 1 投票 0

Composer 说类不符合 psr-4 自动加载,但代码仍然可以工作

Test 类,位于 MyApp\src\models 文件夹中: Test 类,位于 MyApp\src\models 文件夹中: <?php namespace MyApp\Models; class Test { function __construct() { echo "class Test running..."; } } 项目根目录的索引页面: <?php require_once realpath("vendor/autoload.php"); use MyApp\Models\Test; $test = new Test(); 但是当我运行命令时: composer dump-autoload -o 错误消息显示: MyApp/src\models\Test.php does not comply with psr-4 autoloading standard. Skipping. 但无论如何它都会生成包含 autoload.php 和其他文件的供应商文件夹。并且index.php 工作正常。那么我在这里缺少什么? 根据规范,您需要在 FirstCaps 中拥有命名空间路径。 您的路径是小写的 MyApp\src\models 但您的命名空间是 FirstCap: <?php namespace MyApp\Models; 如果您将文件夹重命名为 MyApp\src\Models,您应该可以开始了。 如果您已经将代码提交到 git,并且使用的是 Windows PC,请注意,由于 NTFS 和 FAT 文件系统都不区分大小写,因此将文件夹从 models 重命名为 Models 时可能会遇到问题。您可能需要从 models 重命名为 somethingelse (并提交),然后重命名为 Models (并再次提交)

回答 1 投票 0

需要帮助使用 psr-4 标准自动加载类

我有以下文件结构 - esimowl-mobimatter - - 源代码 - - - 埃西莫尔 - - - - 摩比迈特 - - - - - 产品.php --composer.json --esimowl-mobimatter.php 我的composer.json 文件有

回答 1 投票 0

为什么我的包没有在`@EXPORT`中导出名称?

我想通过自动加载功能提供一些特殊常量。 基本上创建函数工作正常,但代码将允许为常量创建任何名称,而不是特定的

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.