autoload是一种语言约定,允许按需加载缺少的类或方法依赖项。
假设每个函数有 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。
我正在考虑将我最喜欢的 CMS 之一更新到 Rails 7,该 CMS 已存档在 github (PushType) 上。只是自从 Rails 6 以来我就没有编写过 Rails 代码了。显然,有一些关于自动加载方法的事情
我想使用 Databricks 中的 AutoLoader 处理一些镶木地板文件(使用快速压缩)。其中许多文件都是空的或仅包含一条记录。另外,我无法改变它们的创建方式,...
Rails 7.1 解决了相互冲突的 Zeitwerk 变形规则
我有一个 Rails 7.1 应用程序和多个(Rails 引擎)Gems,它们的变形规则相互冲突。 app/controllers/gem1/api/gem1_controller.rb 下有 Gem1::Api::Gem1Controller 和 Gem2::API::
无法使用 spl_autoload_register 加载 PHP 中的类
我刚刚在编写 PHP 时遇到错误。问题是我在 init.php 文件中使用了 spl_autoload_register 但无法加载类文件夹中的类。我确定...
我想由composer创建新的laravel项目。我使用composer create-project laravel/laravel new-project 命令来创建新项目。然后,我的项目是按照这张图片创建的。 我...
致命错误:无法使用简单的 php 博客重新声明 spl_autoload_register()
很多年前我的网站使用了一个简单的php博客平台,这使用了旧的__autoload函数。我最近不得不迁移主机,他们使用较新版本的 php,因此该功能不再
我想在自动加载器上进行 schemaEvolution,以便在新列到达和摄取时添加新列 当我单击“显示”时,流应该会失败并告诉我有未知的列
尝试使用TYPO3 12 ActionController时出现ServiceNotFoundException
当尝试注册我的 DummyController 以将其用作 Typo3 插件时,我收到以下错误: ServiceNotFoundException:您请求了一个不存在的服务“MyVendorName\
我遇到了名称冲突,因此决定使用命名空间,但我在尝试使用 psr-4 自动加载实现命名空间时遇到了问题。我观看了几个视频来学习并尝试......
我想学习 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; }
从经典自动加载器升级到现在使用 zeitwerk 时,自动加载模块时遇到问题。 目前我的模块如下: # 应用程序/lib/configuration/test_configuration 模块测试配置...
我正在开发代码生成器,并且想要获取名称空间的路径。 也就是说,给定名称空间“App\Controller”,我想获取“src/Controller”。 我知道如何获取该信息...
PHP rawurlencode 函数的编码方式与浏览器不同
当我在浏览器中输入字符串 DIN 2080 Fräseraufnahmen SK 30 时,它会将其编码为 DIN%202080%20Fr%C3%A4seraufnahmen%20SK%2030,并且 API 可以正确读取该字符串。但是,在 PHP 脚本中...
可能是一些微不足道的事情,但我在基本自动加载方面遇到了问题。我想创建沙箱项目只是为了测试新的解决方案,所以我创建了以下结构: 沙盒 |-index.php |-
Apache / Laragon + Composer 自动加载问题
我刚刚开始尝试创建一个简单的路由器(我尝试了几种解决方案,例如AltoRouter,但没有任何效果,我想开始一个非常简单的解决方案)。 Composer 自动加载无法到达
我正在寻找最干净、最优雅的方法来在 PHP 8 中构建操作系统安全的路径字符串,并将它们包含在我的自动加载函数中,如果可能的话,无需使用 str_replace() 或 substr() 。 我有一个文件结构...
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 (并再次提交)
我有以下文件结构 - esimowl-mobimatter - - 源代码 - - - 埃西莫尔 - - - - 摩比迈特 - - - - - 产品.php --composer.json --esimowl-mobimatter.php 我的composer.json 文件有
我想通过自动加载功能提供一些特殊常量。 基本上创建函数工作正常,但代码将允许为常量创建任何名称,而不是特定的