Чат Telegram
Группа ВКонтакте
Новый комментарий


fosfat 05.03.2020 в 02:39

PSR-2 находится в категории Deprecated

ivashkevich 05.03.2020 в 03:24

Ага, спасибо. Надо бы обновить урок.

OneMoreTime 01.04.2020 в 22:09

Уже в нескольких уроках уроках встречается нюанс - об исключениях при реализации автозагрузчика.
Сначала я увидел это:

try {
    unset ($argv[0]);

    spl_autoload_register(function (string $className) {
        require_once __DIR__ . '/../src/' . $className . '.php';
    });
    $className = '\\MyProject\\Cli\\'.array_shift($argv); // The first array's element adding
    if(!class_exists($className)) {
        throw new \MyProject\Exceptions\CliException('Class "'.$className.'" is not found');
    }

...

Потом почитал про сам автозагрузчик, в котором есть встроенная опция исключений:

spl_autoload_register ([ callable $autoload_function [, bool $throw = TRUE [, bool $prepend = FALSE ]]] ) : bool

throw
This parameter specifies whether spl_autoload_register() should throw exceptions when the autoload_function cannot be registered.

А сейчас в стандартах PSR следующее:

Autoloader implementations MUST NOT throw exceptions, MUST NOT raise errors of any level, and SHOULD NOT return a value.

В первом случае просто используется пользовательский класс исключений вместо встроенного, а так, можно было включить встроенную опцию? Что означает фраза из PSR? В примере из урока же и есть реализация автозагрузчика..

ivashkevich 02.04.2020 в 07:53

Ну так параметр throw о другом. Не про то, что не удалось загрузить класс, а о том, что функцию не удалось зарегистрировать.
В нашей реализации автозагрузки нет бросания исключений, так что PSR всё соответствует.

Логические задачи с собеседований