Новый комментарий

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. Я бы не стал делать исключений для нейминга в классах моделей.

OneMoreTime 16.09.2020 в 21:57

2.3. Side Effects
A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both.
The phrase “side effects” means execution of logic not directly related to declaring classes, functions, constants, etc., merely from including the file.
“Side effects” include but are not limited to: generating output, explicit use of require or include, connecting to external services, modifying ini settings, emitting errors or exceptions, modifying global or static variables, reading from or writing to a file, and so on.

Тут получается, что если объявляются какие-то методы, функции, константы, в файле не должно быть ни инклюдов, ни риквайров, ни исключений, ни изменение статических/глобальных пеерменных. Что же тогда это за логика такая? Насколько вообще это реально? Это выполнить полностью можно наверное только в интерфейсах?

ivashkevich 27.09.2020 в 16:57

Там же есть примеры, в нашем приложении в курсе ООП так и вышло +/-

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