我正在尝试使用一堆辅助函数自动加载一个命名空间:
<?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
,不确定作曲家是如何工作的,但不会是这样的可能的?
答案 0 :(得分:3)
不幸的是,这是不可能的。如果你想要非延迟自动加载,你必须将它添加到你的composer.json:
$i++
Write-Host "$found: $i - Current $ $_"
每个条目都是带有您功能的文件名。
答案 1 :(得分:0)
我最近偶然发现了相同的问题,即:
对我有用的解决方案是为加载所有功能定义文件的功能模块创建Loader类。
<?php
namespace App;
class Loader
{
public function load()
{
require_once(__DIR__."/Str.php");
require_once(__DIR__."/Submodule/File2.php");
require_once(__DIR__."/Arr.php");
// etc ...
}
}
然后,当我要使用功能模块时,我先加载它:
<?php
use App;
(new App\Loader())->load();
App\Str\starts_with('test', 't');