Чат 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 всё соответствует.

titelivus 29.05.2020 в 12:02

Вопрос о PSR-1:

4.2. Свойства

В данном руководстве намеренно не приводится никаких рекомендаций относительно использования $StudlyCaps, $camelCase или $under_score вариантов именования свойств.

Какой бы вариант именования ни был выбран, СЛЕДУЕТ сохранять его неизменным в рамках некоторого разумного объёма кода (например, на уровне производителя, пакета, класса или метода).

Почему в уроках про ООП, когда мы создавали классы в Models мы в свойствах использовали camelCase
пример:

class Article extends ActiveRecordEntity
{
    /** @var string */
    protected $name;

    /** @var string */
    protected $text;

    /** @var string */
    protected $authorId; // тут camelCase

    /** @var string */
    protected $createdAt; // тут camelCase

В mysql используется under_score. Можно было бы и в Models писать в under_score и тогда бы нам не понадобилось создавать лишние функции типа: underscoreToCamelCase(string $source), camelCaseToUnderscore(string $source)

ivashkevich 29.05.2020 в 12:59

В mysql используется under_score. Можно было бы и в Models писать в under_score и тогда бы нам не понадобилось создавать лишние функции типа: underscoreToCamelCase(string $source), camelCaseToUnderscore(string $source)

Можно, конечно, но на деле все используют camelCase. Я бы не стал делать исключений для нейминга в классах моделей.

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