Мое требование может показаться ужасной практикой, но тем не менее я хотел бы знать, выполнимо ли это.
Я использую композитор для автозагрузки моих классов. В одном из файлов классов я хочу определить функцию, которая может использоваться как сокращение в глобальном пространстве имен. Из-за требований композитора, класс должен быть пространством имен.
Мой вопросЕсть ли способ через небольшие изменения, которые я мог бы заставить это работать?
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
<?php
require_once '../vendor/autoload.php';
use Jodes\MyClass;
new MyClass();
// Jodes\fn(); // works
// fn(); // doesn't work
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\\" : "src"}
}
}
Я перепробовал все, что могу придумать без удачи, несмотря на то, что прочитал больше ссылок, чем могу сосчитать.
Спасибо
Прежде всего, если эта функция не является частью Мои занятия, это не должно быть помещено в тот же файл. Соглашение состоит в том, чтобы поместить каждый класс (и только этот класс) в отдельные файлы.
Для вспомогательной функции, как ваш п () это должно быть доступно глобально, вам понадобится отдельный файл. Объявите функцию там в глобальном пространстве имен, а затем добавьте в свой проект композитора, используя composer’s файлы механизм:
//common.php
<?php
function fn() {
// some code
}
//composer.json
"autoload": {
"files": ["path/to/common.php"]
}
Это загрузит ваш common.php файл для каждого запроса и сделать ваши вспомогательные функции доступными.
Других решений пока нет …