How can I autoload helper functions (outside of any class)? Can I specify in composer.json
some kind of bootstrap file that should be loaded first?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can autoload specific files by editing your composer.json
file like this:
"autoload": {
"files": ["src/helpers.php"]
}
(thanks Kint)
回答2:
After some tests, I have came to the conclusions that adding a namespace to a file that contains functions, and setting up composer to autoload this file seems to not load this function across all the files that require the autoload path.
To synthesize, this will autoload your function everywhere:
composer.json
"autoload": {
"files": [
"src/greetings.php"
]
}
src/greetings.php
<?php
if( ! function_exists('greetings') ) {
function greetings(string $firstname): string {
return "Howdy $firstname!";
}
}
?>
...
But this will not load your function in every require of autoload:
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!";
}
}
?>
And you would call your function using use function ...;
like following:
example/example-1.php
<?php
require( __DIR__ . '/../vendor/autoload.php' );
use function You\greetings;
greetings('Mark'); // "Howdy Mark!"
?>
回答3:
- Add autoload info in
composer.json
{
"autoload": {
"psr-4": {
"Vendor\\Namespace\\": "src/"
}
}
}
- Create a
OwnFunctions.php
with your functions insrc/Functions
folder
// 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);
}
- In your
index.php
require composer autoload
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);
This also can be done with const
use const Vendor\Namespace\Functions\OwnFunctions\someConst;
echo someConst;
Official docs