Про композер правда, это хорошо что эту проблему обсудили, но почему нет решения этой проблемы никто так и не задался вопросом. Install производит установку того что было ранее зафиксировано в lock, update - обновляет lock в соответствии с пакетами и их версиями из json, но почему нет команды которая синхронизирует новые появившиеся записи или исчезнувшие\откоректированные с composer.lock для меня - огромная загадка. я поражён что в комьюнити все обсуждают то как надо и не надо использовать install и update и никому в голову не пришло подумать про composer sync например. бред ? из-за этого обновление фреймворка с правками в json превращается в ад в котором проще удалить lock и сделать install, либо банально - update. На счёт строгой типизации как мне кажется у них тут есть план - ты правильно упомянул про несколько пакетов которые компилируют исходники в бинарники, вспомним ещё так же про божественный Swoole с асинхронным выполнением и хранилищами. Я проводил некоторые синтетические тесты которые показали что даже в некомпиленном варианте PHP медленнее GO всего лишь в 2 раза, а сам GO например медленнее крестов примерно в 8 раз. Я там тестировал ещё питон, но его даже не имеет смысла упоминать что бы не стыдить змееводов. Суть в том что PHP это самый быстрый интерпретируемый язык, но его предел, конечно же, не достигнут. И судя по последним новостям и тенденциям, там есть куда стремиться, о чем свидетельствует возросший интерес к компиляции его исходников. За последний месяц кстати появилось ещё больше информации, например в том же анотейшене есть инфа про господина который внедрил laravel в электрон, это уже чрезвычайно интересно посмотреть (особенно на реализацию подобной штуки в Tauri). Последние изменения в самом языке связанные со строгой типизацией косвенно о чём то намекают, на вектор в котором может двигаться язык. Там где то на горизонте ещё мелькает свежий RFC: 2D Matrix Operations, чувствуете чем пахнет? Tensorflow c Pytorch немножко напряглись. Гром ещё грянет, главное поменьше проф деформаций, снобизма и душноты и побольше энтузиазма и коммунизма за что мы все и любим PHP.
Валентин, огромное спасибо за ваш подробный ответ на мой вопрос в прошлом стриме. Собственно после того как я написал сообщения до меня дошло что вы имели в виду именно навязывание интерфейса для DTO. Попробовал на рабочем проекте (всё равно рефакторили либу) и получилось прямо именно то что нужно. Проблема была в том что либа требовала реализацию обработчика, но иногда клиент мог передавать обработчик, который либа должна доконфигурировать. Добавлять метод configure в интерфейс было плохо потому что у большинства клиентов данный метод будет пустой. Поробовал сделать ConfigurableHandlerInterface. Но выглядело максимально костыльно. А вот ConfigurableAttribute встал как родной. Просто беру все методы с этим аттрибутом и выполняю их с параметрами из рантайма. Теперь буду объяснять всей команде как с этим работать. И отдельное спасибо за пример с контрактом обработчика без интерфейса. Получается что-то golang-подобное - использование требует конкретное определение функции. Не знал что в psalm можно так делать.
После недели работы с атрибутом пришёл к одному неутешительному выводу. Атрибут "скрывает" применение метода. Поясню. Если бы я сделал ConfigurableInterface то кликая на методе меня бы сразу перебрасывало в то место библиотеки где данный метод используется. А когда у меня атрибут, то есть соблазн удалить метод как неиспользуемый. Phpstorm не может найти где этот метод применяется. А если кликнуть на атрибут то переносит на сам атрибут, а не на того место где он используется. Это, скорее, дело привычки, документации и дисциплины в команде, но это было первое возражение по использованию атрибута. Вторым было то что нет контакта на метод конфигурирования. Нужно, опять же, посылать всех читать документацию. И может быть делать дополнительные проверки перед тем как вызвать метод, с таким атрибутом.
41:40 Не знаю почему Мартин не рекомендует (не помню, книгу давно читал), но как минимум что засераются изменения в гите уже достаточная причина не выравнивать. Добавишь один элемент на символ длиннее и все n строк нужно исправлять. Бредовая идея с выравниванием.
Про композер правда, это хорошо что эту проблему обсудили, но почему нет решения этой проблемы никто так и не задался вопросом. Install производит установку того что было ранее зафиксировано в lock, update - обновляет lock в соответствии с пакетами и их версиями из json, но почему нет команды которая синхронизирует новые появившиеся записи или исчезнувшие\откоректированные с composer.lock для меня - огромная загадка. я поражён что в комьюнити все обсуждают то как надо и не надо использовать install и update и никому в голову не пришло подумать про composer sync например. бред ? из-за этого обновление фреймворка с правками в json превращается в ад в котором проще удалить lock и сделать install, либо банально - update.
На счёт строгой типизации как мне кажется у них тут есть план - ты правильно упомянул про несколько пакетов которые компилируют исходники в бинарники, вспомним ещё так же про божественный Swoole с асинхронным выполнением и хранилищами. Я проводил некоторые синтетические тесты которые показали что даже в некомпиленном варианте PHP медленнее GO всего лишь в 2 раза, а сам GO например медленнее крестов примерно в 8 раз. Я там тестировал ещё питон, но его даже не имеет смысла упоминать что бы не стыдить змееводов. Суть в том что PHP это самый быстрый интерпретируемый язык, но его предел, конечно же, не достигнут. И судя по последним новостям и тенденциям, там есть куда стремиться, о чем свидетельствует возросший интерес к компиляции его исходников. За последний месяц кстати появилось ещё больше информации, например в том же анотейшене есть инфа про господина который внедрил laravel в электрон, это уже чрезвычайно интересно посмотреть (особенно на реализацию подобной штуки в Tauri). Последние изменения в самом языке связанные со строгой типизацией косвенно о чём то намекают, на вектор в котором может двигаться язык. Там где то на горизонте ещё мелькает свежий RFC: 2D Matrix Operations, чувствуете чем пахнет? Tensorflow c Pytorch немножко напряглись. Гром ещё грянет, главное поменьше проф деформаций, снобизма и душноты и побольше энтузиазма и коммунизма за что мы все и любим PHP.
Огонь! Наконец уровень звука в порядке!
Валентин, огромное спасибо за ваш подробный ответ на мой вопрос в прошлом стриме. Собственно после того как я написал сообщения до меня дошло что вы имели в виду именно навязывание интерфейса для DTO.
Попробовал на рабочем проекте (всё равно рефакторили либу) и получилось прямо именно то что нужно. Проблема была в том что либа требовала реализацию обработчика, но иногда клиент мог передавать обработчик, который либа должна доконфигурировать. Добавлять метод configure в интерфейс было плохо потому что у большинства клиентов данный метод будет пустой. Поробовал сделать ConfigurableHandlerInterface. Но выглядело максимально костыльно. А вот ConfigurableAttribute встал как родной. Просто беру все методы с этим аттрибутом и выполняю их с параметрами из рантайма. Теперь буду объяснять всей команде как с этим работать.
И отдельное спасибо за пример с контрактом обработчика без интерфейса. Получается что-то golang-подобное - использование требует конкретное определение функции. Не знал что в psalm можно так делать.
После недели работы с атрибутом пришёл к одному неутешительному выводу. Атрибут "скрывает" применение метода. Поясню.
Если бы я сделал ConfigurableInterface то кликая на методе меня бы сразу перебрасывало в то место библиотеки где данный метод используется. А когда у меня атрибут, то есть соблазн удалить метод как неиспользуемый. Phpstorm не может найти где этот метод применяется. А если кликнуть на атрибут то переносит на сам атрибут, а не на того место где он используется.
Это, скорее, дело привычки, документации и дисциплины в команде, но это было первое возражение по использованию атрибута.
Вторым было то что нет контакта на метод конфигурирования. Нужно, опять же, посылать всех читать документацию. И может быть делать дополнительные проверки перед тем как вызвать метод, с таким атрибутом.
41:40 Не знаю почему Мартин не рекомендует (не помню, книгу давно читал), но как минимум что засераются изменения в гите уже достаточная причина не выравнивать. Добавишь один элемент на символ длиннее и все n строк нужно исправлять. Бредовая идея с выравниванием.
Да, но согласись что в определённых случаях это киллер фича по читабельности и удобству. с другой стороны платишь за всё размером коммита
Ещё можно методы абстрактного класса помечать как final