61

如何自动加载辅助函数(在任何类之外)?我可以在composer.json某种应该首先加载的引导文件中指定吗?

4

3 回答 3

84

您可以通过像这样编辑文件来自动加载特定文件:composer.json

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

(感谢金特

于 2014-06-11T19:45:12.227 回答
12

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

为了综合,这将在任何地方自动加载你的函数:

作曲家.json

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

src/greetings.php

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

...

但这不会在自动加载的每个要求中加载您的函数:

作曲家.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!"
?>
于 2018-11-03T21:15:33.867 回答
-5
  1. 添加自动加载信息composer.json
{
    "autoload": {
        "psr-4": {
            "Vendor\\Namespace\\": "src/"
        }
    }
}
  1. 在文件夹OwnFunctions.php中使用您的函数创建一个src/Functions
// 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);
}
  1. 在您的index.php要求作曲家自动加载
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;

官方文档

于 2018-09-27T09:00:47.383 回答