пространства имен — как включить псевдонимы php в файлы

Я могу написать это в файле:

use Carbon\Carbon as Carbon;

Я попытался создать файл ‘aliases.php’:

use Carbon\Carbon as Carbon;

на который я тогда ссылаюсь вот так:

require __DIR__.'/../bootstrap/aliases.php';

printf("Right now is %s", Carbon::now()->toDateTimeString());

но это дает мне ошибку: «Неустранимая ошибка: класс« Углерод »не найден»

Итак, как я могу «включить» один файл со всеми предопределенными псевдонимами?

4

Решение

Прежде всего, причина, почему ваш aliases.php файл не работает, потому что использование заявления видны только в файле, в котором они объявлены. Другими словами, они работают в вашем aliases.php файл, но не в файлах, которые включают в себя / требуют aliases.php.

Из документации PHP Использование пространств имен: алиасинг / импорт:

Замечания:

Правила импорта основаны на файлах, это означает, что включенные файлы НЕ наследуют правила импорта родительского файла.

Во-вторых, из-за того, как работает пространство имен в PHP, невозможно сделать то, что вы пытаетесь сделать. Когда PHP видит имя класса, оно всегда пытается найти класс в текущем пространстве имен, и изменить его невозможно. Поэтому, если вы позвоните углерод в любом коде пространства имен он будет интерпретироваться как Текущий \ Namespace \ Carbon, и если вы вызываете его из глобального пространства имен, это будет интерпретироваться как \ Carbon.

Единственное, что приходит мне в голову, что может сделать что-то подобное, это объявить класс в глобальном пространстве имен, который расширит класс, который вы пытаетесь использовать, а затем использовать эти классы вместо этого. Для углерода это будет:

<?php
use Carbon\Carbon as BaseCarbon;

class Carbon extends BaseCarbon {}

Тогда в вашем коде вы можете получить к нему доступ:

\Carbon::now();

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

3

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

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

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