Как стать автором
Обновить
4
0

Пользователь

Отправить сообщение
apt-get install sl
Для sl в Debian нужно настроить PATH.
unix.stackexchange.com/a/465229/228322
Ещё я за отсутствие final в библиотеках, никогда не знаешь, как твой код будут использовать и какие могут там быть баги. Дать возможность разработчикам исправить их — меньшее зло по сравнению с запретами неправильных наследований.
Как раз в библиотеках final нужен больше всего. Отсутствие final у классов это косвенный признак того, что наследование является точкой расширения данной библиотеки. Соответственно разработчик такой библиотеки (если он следует семантическому версионированию) обязан соблюдать обратную совместимость при изменении таких классов. На практике, это приводит к тому, что такие классы очень сложно поддаются рефакторингу. Нельзя просто так менять сигнатуры у protected методов и тем более удалить целиком класс. Фактически класс будет «заморожен» как минимум до следующего мажорного релиза.
Другой важный момент это то, что удалить final никогда не поздно. Если появится use case для того, чтобы открыть класс для наследования, то сделать это можно будет в любой момент, потому что это не ломает обратную совместимость.
Стоит сказать, что написание дополнительной строки кода – довольно невысокая цена за получаемые с агрегацией преимущества

Да ладно. Даже в вашем примере без док. блока, это не одна строка, а четыре.

public function getCommentKeys(): array
{
  return $this->commentBlock->getCommentKeys();
}

Если в новом классе нужно подменить всего один метод из десяти, то этот класс будет процентов на 90 состоять из таких вот суррогатных декораций. Вроде ничего страшного, но остаётся ощущение что с наследованием это выглядело бы намного красивее, по крайней мере внешне.
Стоит отметить, что размер, а соответственно и сложность vaimo/composer-patches в несколько раз больше чем cweagans/composer-patches. Поэтому если последний решает вашу задачу, то возможно лучше выбрать более простое решение.
Фрактал вроде как раз эти задачи и решает.
fractal.thephpleague.com
!empty(value)? value: $default_val;
empty() не подходит здесь, потому что для integer, 0 не пустое значение. Тоже самое для false для boolean.
Проверяйте на null.
$array['key'] ?? $default_value;

PDO::FETCH_CLASS — Зачем такие сложности? Специфика задач подразумевает очень короткий срок жизни кода. И даже безотноситено этого, как использование PDO::FETCH_CLASS гарантирует мне соблюдение типов?
Не совмем представляю, что такое короткий срок жизни кода. Классы как раз упрощают работу с данными и предоставляют типизацию. Если вы не можете использовать ORM, создавайте простые value-объекты через PDO::FETCH_CLASS или из массивов.

final class User {
  public function getName(): string {
    return $this->name;
  }
}


См. steemit.com/php/@crell/php-use-associative-arrays-basically-never

FETCH_COLUM по этой же причине не всегда применим
array_column
Главное не редактировать эти файлы. И даже права доступа менять не желательно.
мне удобно работать с базой через PDO, которое отдаёт тебе данные опять же в массивах
А как же PDO::FETCH_OBJ и PDO::FETCH_CLASS?
Следующим требованием было получить возможность упростить массив из одного значения до ровно этого значения.
Для этого есть специальный режим.
phpdelusions.net/pdo/fetch_modes#FETCH_COLUMN

В PHP7 появились подсказки типов (type hinting)
Всё таки, правильней переводить «type hinting» как «контроль типов». И появился он не в PHP 7, а в PHP 5. В PHP 7 был добавлен контроль скалярных типов и возвращаемых значений. Кроме этого в следующем релизе (7.4) появятся типизированные свойства объектов.
А если бы мы избрали подход с композицией и внедрением зависимостей, то получилось бы так:
Обратная сторона копозиции это повторяющийся код. В вашем примере фактически каждый контроллер в системе должен иметь такой конструктор.

class BlogController {
    public BlogController (
        TemplateRenderer templateRenderer
    ) {
    }
}
todo имеют право на жизнь, при условии что вы их таки устраняете не позднее чем через условные несколько дней
А если это изменение, не возможно применить в текущем мажорном релизе из-за обратной совместимости? Удобно оставлять себе пометку об этом: "@todo Fix this in 3.x".

Но тут легко перейти грань и вот уже новые todo теряются на фоне сотен старых и очень старых. Нужна какая-то периодическая проверка что ли, на наличие todo в проекте и чтобы прям настойчиво напоминало, что надо от них избавиться.
В PhpStorm нужен всего один клик, чтобы найти все todo-шки в проекте.
Для документации. Чтобы она не расходилась с реализацией. Что в этом сомнительного?
Можно подойти с другой стороны. Генерировать UML из кода.
На xakep.ru есть интервью (теперь без картинок).
xakep.ru/2012/01/09/58122

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность