Ещё я за отсутствие final в библиотеках, никогда не знаешь, как твой код будут использовать и какие могут там быть баги. Дать возможность разработчикам исправить их — меньшее зло по сравнению с запретами неправильных наследований.
Как раз в библиотеках final нужен больше всего. Отсутствие final у классов это косвенный признак того, что наследование является точкой расширения данной библиотеки. Соответственно разработчик такой библиотеки (если он следует семантическому версионированию) обязан соблюдать обратную совместимость при изменении таких классов. На практике, это приводит к тому, что такие классы очень сложно поддаются рефакторингу. Нельзя просто так менять сигнатуры у protected методов и тем более удалить целиком класс. Фактически класс будет «заморожен» как минимум до следующего мажорного релиза.
Другой важный момент это то, что удалить final никогда не поздно. Если появится use case для того, чтобы открыть класс для наследования, то сделать это можно будет в любой момент, потому что это не ломает обратную совместимость.
Стоит сказать, что написание дополнительной строки кода – довольно невысокая цена за получаемые с агрегацией преимущества
Да ладно. Даже в вашем примере без док. блока, это не одна строка, а четыре.
public function getCommentKeys(): array
{
return $this->commentBlock->getCommentKeys();
}
Если в новом классе нужно подменить всего один метод из десяти, то этот класс будет процентов на 90 состоять из таких вот суррогатных декораций. Вроде ничего страшного, но остаётся ощущение что с наследованием это выглядело бы намного красивее, по крайней мере внешне.
Стоит отметить, что размер, а соответственно и сложность vaimo/composer-patches в несколько раз больше чем cweagans/composer-patches. Поэтому если последний решает вашу задачу, то возможно лучше выбрать более простое решение.
PDO::FETCH_CLASS — Зачем такие сложности? Специфика задач подразумевает очень короткий срок жизни кода. И даже безотноситено этого, как использование PDO::FETCH_CLASS гарантирует мне соблюдение типов?
Не совмем представляю, что такое короткий срок жизни кода. Классы как раз упрощают работу с данными и предоставляют типизацию. Если вы не можете использовать ORM, создавайте простые value-объекты через PDO::FETCH_CLASS или из массивов.
final class User {
public function getName(): string {
return $this->name;
}
}
Всё таки, правильней переводить «type hinting» как «контроль типов». И появился он не в PHP 7, а в PHP 5. В PHP 7 был добавлен контроль скалярных типов и возвращаемых значений. Кроме этого в следующем релизе (7.4) появятся типизированные свойства объектов.
todo имеют право на жизнь, при условии что вы их таки устраняете не позднее чем через условные несколько дней
А если это изменение, не возможно применить в текущем мажорном релизе из-за обратной совместимости? Удобно оставлять себе пометку об этом: "@todo Fix this in 3.x".
Но тут легко перейти грань и вот уже новые todo теряются на фоне сотен старых и очень старых. Нужна какая-то периодическая проверка что ли, на наличие todo в проекте и чтобы прям настойчиво напоминало, что надо от них избавиться.
В PhpStorm нужен всего один клик, чтобы найти все todo-шки в проекте.
github.com/symfony/http-foundation/blob/v5.0.2/Response.php#L21-L83
unix.stackexchange.com/a/465229/228322
Другой важный момент это то, что удалить final никогда не поздно. Если появится use case для того, чтобы открыть класс для наследования, то сделать это можно будет в любой момент, потому что это не ломает обратную совместимость.
Да ладно. Даже в вашем примере без док. блока, это не одна строка, а четыре.
Если в новом классе нужно подменить всего один метод из десяти, то этот класс будет процентов на 90 состоять из таких вот суррогатных декораций. Вроде ничего страшного, но остаётся ощущение что с наследованием это выглядело бы намного красивее, по крайней мере внешне.
eng.getwisdom.io/awesome-unicode/#lowercasetransformationcollisions
fractal.thephpleague.com
Проверяйте на null.
См. steemit.com/php/@crell/php-use-associative-arrays-basically-never
array_column
phpdelusions.net/pdo/fetch_modes#FETCH_COLUMN
The Art of Command Line
Awesome Bash
Awesome CLI apps
Awesome-macOS-command-line
Terminals are sexy
github.com/Yelp/dumb-init
github.com/krallin/tini
@todo Fix this in 3.x
".В PhpStorm нужен всего один клик, чтобы найти все todo-шки в проекте.
xakep.ru/2012/01/09/58122