当前位置: 首页 > 知识库问答 >
问题:

作曲家/PSR-如何自动加载函数?

蒋鸿文
2023-03-14

如何自动加载助手函数(在任何类之外)?我可以在编写器中指定。json应该首先加载的某种引导文件?

共有3个答案

魏冷勋
2023-03-14
  1. 添加自动加载信息在composer.json
{
    "autoload": {
        "psr-4": {
            "Vendor\\Namespace\\": "src/"
        }
    }
}
// recommend
// http://php.net/manual/en/control-structures.declare.php
declare(strict_types=1);

namespace Vendor\Namespace\Functions\OwnFunctions;

function magic(int $number): string {
    return strval($number);
}
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';

use function Vendor\Namespace\Functions\OwnFunctions\magic;

echo magic(1);

// or you can use only OwnFunctions namespace
use Vendor\Namespace\Functions\OwnFunctions;

echo OwnFunctions\magic(1);

这也可以通过const实现

use const Vendor\Namespace\Functions\OwnFunctions\someConst;
echo someConst;

公文

陆洲
2023-03-14

经过一些测试,我得出结论,在包含函数的文件中添加名称空间,并将composer设置为自动加载此文件似乎不会在所有需要自动加载路径的文件中加载此函数。

要进行合成,这将在任何地方自动加载您的函数:

composer.json

"autoload": {
    "files": [
        "src/greetings.php"
    ]
}

SRC/greetings.php

<?php
    if( ! function_exists('greetings') ) {
        function greetings(string $firstname): string {
            return "Howdy $firstname!";
        }
    }
?>

...

但这不会在每次自动加载时加载您的功能

composer.json

"autoload": {
    "files": [
        "src/greetings.php"
    ]
}

SRC/greetings.php

<?php
    namespace You;

    if( ! function_exists('greetings') ) {
        function greetings(string $firstname): string {
            return "Howdy $firstname!";
        }
    }
?>

您可以使用use function 如下所示:

例/example-1。php

<?php
    require( __DIR__ . '/../vendor/autoload.php' );

    use function You\greetings;

    greetings('Mark'); // "Howdy Mark!"
?>

卞俊贤
2023-03-14

您可以通过如下方式编辑您的composer.json文件来自动加载特定文件:

"autoload": {
    "files": ["src/helpers.php"]
}

(谢谢金特)

 类似资料:
  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?

  • 我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。 我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。 结构(精简为相关文件): composer.json phpunit.xml 测试/功能/基本测试用例。php 测试/功能/主页测试。

  • 我很难理解这个简单的界面有什么问题。 当我收到下面的通知 弃用通知:./App/Interfaces/renderData.php中的类App\Interfaces\renderData不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。 composer.json自动加载部分: 文件夹结构为: 我已经尝试将应用重命名为应用,然后转储自动加载,但问题仍然存在。

  • 我按照作曲家的说明,成功安装了作曲家。我想使用Tumblr全新的php api客户端。 我的文件夹结构: : : 使用也非常有效。但是当执行找不到该类。 致命错误:类'Tumblr\API\Client'未在第9行的[...]/htdocs/Tumblr/myfile.php中找到

  • 我正在用Slim和Twig创建一个web应用程序。我使用的库工作得很好,我可以轻松地调用它们。然而,作曲家并没有找到我自己的类。json自动加载psr-4(psr-0也找不到它们) 这是我的文件系统: 这是我的: 然后: 最后是我的文件: 当我运行时,命令输出: 生成包含0类的自动加载文件 然后以状态代码0退出。应该能找到4个班吧? 运行应用程序显示错误: 致命错误:未捕获错误:类'类\应用程序'

  • 我有一位作曲家。json结构如下: 我有文件在应用程序/数据库/种子(这里的文件可以动态创建,所以解决方案与类地图:[应用程序/数据库/种子]不工作在这里bcs我必须始终转储-自动加载前播种: 用户表种子。php 数据库播种机。php 结构如下: 在php编写器之后。phar安装和php编写器。phar dump autoload我不能在应用程序中使用,例如在索引中。php 因为我收到错误:类Da