Сделайте функцию, которая объявлена ​​в автоматически загруженном файле пространств имен, в глобальную функцию

Мое требование может показаться ужасной практикой, но тем не менее я хотел бы знать, выполнимо ли это.

Я использую композитор для автозагрузки моих классов. В одном из файлов классов я хочу определить функцию, которая может использоваться как сокращение в глобальном пространстве имен. Из-за требований композитора, класс должен быть пространством имен.

Мой вопросЕсть ли способ через небольшие изменения, которые я мог бы заставить это работать?

MyClass.php:

<?php

namespace Jodes;

class MyClass {
public function __construct() {
echo "I am the class";
}
}

function fn(){
echo "I am a shorthand for doing stuff";
}

index.php:

<?php

require_once '../vendor/autoload.php';

use Jodes\MyClass;

new MyClass();

// Jodes\fn();  // works
// fn();        // doesn't work

composer.json

{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\\" : "src"}
}
}

Я перепробовал все, что могу придумать без удачи, несмотря на то, что прочитал больше ссылок, чем могу сосчитать.

Спасибо

3

Решение

Прежде всего, если эта функция не является частью Мои занятия, это не должно быть помещено в тот же файл. Соглашение состоит в том, чтобы поместить каждый класс (и только этот класс) в отдельные файлы.

Для вспомогательной функции, как ваш п () это должно быть доступно глобально, вам понадобится отдельный файл. Объявите функцию там в глобальном пространстве имен, а затем добавьте в свой проект композитора, используя composer’s файлы механизм:

//common.php
<?php
function fn() {
// some code
}

//composer.json
"autoload": {
"files": ["path/to/common.php"]
}

Это загрузит ваш common.php файл для каждого запроса и сделать ваши вспомогательные функции доступными.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]