首页 文章

在php中自动加载整个命名空间(用于函数而不是类)

提问于
浏览
1

我正在尝试使用一堆辅助函数自动加载一个名称空间:

<?php

namespace App\Str {
    function contains($haystack, $needles)
    {
        foreach ((array)$needles as $needle) {
            if ($needle !== '' && mb_strpos($haystack, $needle) !== false) {
                return true;
            }
        }
        return false;
    }

    function starts_with($haystack, $needles)
    {
        foreach ((array) $needles as $needle) {
            if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) {
                return true;
            }
        }
        return false;
    }
}

Psr-4作曲家自动加载在这里没有帮助:

Call to undefined function App\Str\starts_with()

我知道我不能(懒惰地)自动加载函数,并且我给出了使用静态函数创建类的建议,但是因为我更喜欢函数式编程,所以我想首先研究其他选项 . 例如,我可以以某种方式(懒惰地)自动加载整个命名空间本身吗?我想以下列方式使用此命名空间:

use App\Str as Str;

$test = Str\starts_with('test', 't');

我想以某种方式指定作曲家,如果它看到 App\Str 名称空间,它应该懒得要求文件 app/Str.php ,不确定作曲家是如何工作的,但这样的东西不可能吗?

1 回答

  • 2

    不幸的是,这是不可能的 . 如果你想要非懒惰的自动加载,你必须将它添加到你的composer.json:

    "autoload": {
        "files": [
            "app/Str.php",
            "app/Arr.php"
        ]
    }
    

    每个条目都是带有您的功能的文件名 .

相关问题