Привет!
Кстати, не успели мы оправиться после блокировки докер хаба, как подъехала новая в виде блокировки репозитория ondrej/php на packages.sury.org от самого автора:
Тут можно почитать его точку зрения https://github.com/oerdnj/deb.sury.org/issues/2155 по геоблокировке.
Вкратце, он заблокировал доступ пользователем из РФ, пока только к тем репозиториям, к которым у него есть доступ.
Не сказать что это блокировка вызовет большую проблему нежели блокировка докер хаба, но все же некоторые неудобства несет, те же мануалы по установке PHP на Debian/Ubuntu будут немного "барахлить" в случае установки на Debian, так то все же репозитории Ondrej'а были удобны и своевременно обновляемые.
Пока остаётся использовать стандартные пакеты php в ОС, хоть, конечно с небольшим отставанием.
Так же остаётся вариант контейнера докера с нужной версией php.
Ну и опять же зеркала того же https://mirror.yandex.ru скорее всего помогут обойти блокировку,
Кстати на Ubuntu пока проблему блокировки не наблюдаю, благо что заблокировать launchpad.net у него не получится.
Никто пока не столкнулся с этим?
Кстати, не успели мы оправиться после блокировки докер хаба, как подъехала новая в виде блокировки репозитория ondrej/php на packages.sury.org от самого автора:
Тут можно почитать его точку зрения https://github.com/oerdnj/deb.sury.org/issues/2155 по геоблокировке.
Вкратце, он заблокировал доступ пользователем из РФ, пока только к тем репозиториям, к которым у него есть доступ.
Не сказать что это блокировка вызовет большую проблему нежели блокировка докер хаба, но все же некоторые неудобства несет, те же мануалы по установке PHP на Debian/Ubuntu будут немного "барахлить" в случае установки на Debian, так то все же репозитории Ondrej'а были удобны и своевременно обновляемые.
Пока остаётся использовать стандартные пакеты php в ОС, хоть, конечно с небольшим отставанием.
Так же остаётся вариант контейнера докера с нужной версией php.
Ну и опять же зеркала того же https://mirror.yandex.ru скорее всего помогут обойти блокировку,
Кстати на Ubuntu пока проблему блокировки не наблюдаю, благо что заблокировать launchpad.net у него не получится.
Никто пока не столкнулся с этим?
GitHub
Geoblocking Russia · Issue #2155 · oerdnj/deb.sury.org
I should have done this before, and sorry it took me so long, but I started geoblocking Russia on packages.sury.org. I can't do that for launchpad packages, but if I could I would. I see no rea...
🤬6💩3😁1
Всем, доброй пятницы!
Так ну "лед тронулся", график релизов PHP 8.4 немного сместился, Альфу 1 должны были выкатить только вчера 4 июля (хотя на самом деле 2 июля уже был ее релиз):
Запустил Альфу,
- "пощупал" функции array_find, array_find_key, array_any, array_all - достаточно удобно, про них кстати надо будет написать еще
- хуки пока не работают
- не получилось сходу запустить request_parse_body,
- зато Создание без скобочек от @vudaltsov работает без нареканий)
ждем остальные релизы!
Так ну "лед тронулся", график релизов PHP 8.4 немного сместился, Альфу 1 должны были выкатить только вчера 4 июля (хотя на самом деле 2 июля уже был ее релиз):
Запустил Альфу,
- "пощупал" функции array_find, array_find_key, array_any, array_all - достаточно удобно, про них кстати надо будет написать еще
- хуки пока не работают
- не получилось сходу запустить request_parse_body,
- зато Создание без скобочек от @vudaltsov работает без нареканий)
ждем остальные релизы!
👍19🎉6🔥4
Forwarded from Пых (Валентин Удальцов)
Пыхап 8 ноября!
Друзья, ровно через 2 недели пройдёт первый в истории митап от канала Пых! В программе у нас 3 хардкорных доклада:
🤯 (НЕ) используйте функциональное программирование в PHP
Андрей Клименко поломает вам голову основами ФП и примерами на Scala, из которых станет понятно, что из функционального мира уже доступно в PHP, а что ещё нужно законтрибьютить.
🐇 Вы не знаете RabbitMQ!
Вадим Занфир расскажет, почему все современные фреймворки теряют сообщения и как на самом деле надо работать с кроликом.
🤑 Как считать деньги и не терять их
В аду есть специальный котёл для тех, кто использует
Спонсор первого Пыхапа — моя любимая компания Happy Job 💚, где я проработал 4 года! Обращайтесь в Happy Job за исследованиями вовлечённости и оценкой 360, ребята делают лучшую платформу для развития сотрудников.
Пыхап пройдёт в уютном лофте «Событие» на Таганке, начало в 18:30. Вход бесплатный, но по билетам. Регистрация откроется на канале Пых в ближайший понедельник в 15:00, не пропустите. Ну и конечно же митап будет транслироваться на канале PHP Point с записью.
Друзья, ровно через 2 недели пройдёт первый в истории митап от канала Пых! В программе у нас 3 хардкорных доклада:
Андрей Клименко поломает вам голову основами ФП и примерами на Scala, из которых станет понятно, что из функционального мира уже доступно в PHP, а что ещё нужно законтрибьютить.
Вадим Занфир расскажет, почему все современные фреймворки теряют сообщения и как на самом деле надо работать с кроликом.
В аду есть специальный котёл для тех, кто использует
float для хранения денег. Сергей Жук подскажет, как в него не угодить.Спонсор первого Пыхапа — моя любимая компания Happy Job 💚, где я проработал 4 года! Обращайтесь в Happy Job за исследованиями вовлечённости и оценкой 360, ребята делают лучшую платформу для развития сотрудников.
Пыхап пройдёт в уютном лофте «Событие» на Таганке, начало в 18:30. Вход бесплатный, но по билетам. Регистрация откроется на канале Пых в ближайший понедельник в 15:00, не пропустите. Ну и конечно же митап будет транслироваться на канале PHP Point с записью.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
Всем, привет!
Вы меня, наверное потеряли, но я нашелся и готов рассказать кое-что :) В общем:
- Сегодня 7 ноября последний релиз кандидат PHP 8.4 (затеган он был уже пару дней назад, ну ок)
- Актуализировал список всех фич PHP 8.4 на сегодня, включая Lazy objects, напомню ленивая инициализация или отложенная инициализация - распространенный шаблон, используемый фреймворками для создания прокси-объектов, ленивая загрузка которых используется в компонентах внедрения зависимостей для предоставления ленивых сервисов, которые полностью инициализируются только при необходимости. Некоторые ORM делают свои сущности ленивыми, позволяя объектам гидратировать себя из базы данных только при обращении.
Вот и PHP 8.4 в этом RFC позволит нам создавать ленивые объекты:
так же Ассиметричную видимость свойств, функции для работы с массивом array_find, array_find_key, array_any, array_all, новые функции mb_ucfirst и mb_lcfirst, небольшие дополнения с деприкейтами типа "Неявные типы, допускающих NULL ", "Вызов session_set_save_handler() с более чем 2 аргументами" и константой E_STRICT.
- Как уже запостил @vudaltsov в посте Пыха о том что действительно следующая версия PHP будет PHP 8.5, а не как все ожидали 9.0 (на просторах интернета я уже видел статьи что нового в php 9.0 😁) и в UPGRADING уже пошли первые изменения, следить за которыми можно в статье PHP 8.5 , так сказать продолжаем в том же духе.
- Напоминаю что вчера у Валентина прошел лайв кодинг добавления поддержки PHP 8.4 в Symfony PropertyInfo https://youtu.be/LjJtb-kFYZg, что полезно будет посмотреть, хоть вывод неутешительный на данный момент 😁 ну, а завтра 8 ноября на канале Пыха пройдет Пыхап, для всех желающих посмотреть.
Вы меня, наверное потеряли, но я нашелся и готов рассказать кое-что :) В общем:
- Сегодня 7 ноября последний релиз кандидат PHP 8.4 (затеган он был уже пару дней назад, ну ок)
- Актуализировал список всех фич PHP 8.4 на сегодня, включая Lazy objects, напомню ленивая инициализация или отложенная инициализация - распространенный шаблон, используемый фреймворками для создания прокси-объектов, ленивая загрузка которых используется в компонентах внедрения зависимостей для предоставления ленивых сервисов, которые полностью инициализируются только при необходимости. Некоторые ORM делают свои сущности ленивыми, позволяя объектам гидратировать себя из базы данных только при обращении.
Вот и PHP 8.4 в этом RFC позволит нам создавать ленивые объекты:
class MyClass
{
public function __construct(private int $foo)
{
// Здесь сложная логика инициализации
}
// ...
}
$initializer = static function (MyClass $ghost): void {
$ghost->__construct(123);
};
$reflector = new ReflectionClass(MyClass::class);
$object = $reflector->newLazyGhost($initializer);
// на этом этапе $object - ленивый призрачный объект
//Для создания ленивого прокси необходимо использовать метод newLazyProxy()
$initializer = static function (MyClass $proxy): MyClass {
return new MyClass(123);
};
$reflector = new ReflectionClass(MyClass::class);
$object = $reflector->newLazyProxy($initializer);
так же Ассиметричную видимость свойств, функции для работы с массивом array_find, array_find_key, array_any, array_all, новые функции mb_ucfirst и mb_lcfirst, небольшие дополнения с деприкейтами типа "Неявные типы, допускающих NULL ", "Вызов session_set_save_handler() с более чем 2 аргументами" и константой E_STRICT.
- Как уже запостил @vudaltsov в посте Пыха о том что действительно следующая версия PHP будет PHP 8.5, а не как все ожидали 9.0 (на просторах интернета я уже видел статьи что нового в php 9.0 😁) и в UPGRADING уже пошли первые изменения, следить за которыми можно в статье PHP 8.5 , так сказать продолжаем в том же духе.
- Напоминаю что вчера у Валентина прошел лайв кодинг добавления поддержки PHP 8.4 в Symfony PropertyInfo https://youtu.be/LjJtb-kFYZg, что полезно будет посмотреть, хоть вывод неутешительный на данный момент 😁 ну, а завтра 8 ноября на канале Пыха пройдет Пыхап, для всех желающих посмотреть.
👍8🔥7❤3
В отпуске пропускаю все самое интересное 😄
Зарелизился PhpStan 2.0 ( уже и первый фикс в виде 2.0.1)!
Из явных фишек можно отметить:
- Новый уровень 10.
Для хардкорщиков максимального уровня! Ранее 9 уровень показал, что использование mixed в вашем коде на самом деле совсем не безопасно, и с этим надо что-то делать. Пока у него есть некоторые слепые пятна, и он все еще допускает некоторые ошибки. Внутри себя он называется checkExplicitMixed. Это означает, что он будет сообщать об ошибках для явно типизированных mixed значений в вашем коде.
- Тип списка:
Все мы знаем, что массивы PHP действительно мощные, но они представляют одновременно несколько концепций в одной структуре данных, и иногда с этим трудно работать и иногда полезно сузить его, когда мы уверены, что нам нужна только одна концепция, например список.
- Оптимизация потребление памяти + увеличена производительность работы
Была уменьшена прожорливость PhpStan и улучшена производительность, как в свое время это произошло с Composer с перехода 1 на 2 версию и это радует!
- Улучшена работа с кэширование и использования дискового пространства
Избавились от кэша без замедления анализа. Теперь меньше телодвижений, которые нужно сделать невалидными, меньше вещей, о которых нужно беспокоиться, меньше места на диске, которое нужно занимать.
Ну и первое что стоит в планах после релиза - это добавление поддержки PHP 8.4. Можно ожидать, что она будет добавлена до конца 2024 года.
Зарелизился PhpStan 2.0 ( уже и первый фикс в виде 2.0.1)!
Из явных фишек можно отметить:
- Новый уровень 10.
Для хардкорщиков максимального уровня! Ранее 9 уровень показал, что использование mixed в вашем коде на самом деле совсем не безопасно, и с этим надо что-то делать. Пока у него есть некоторые слепые пятна, и он все еще допускает некоторые ошибки. Внутри себя он называется checkExplicitMixed. Это означает, что он будет сообщать об ошибках для явно типизированных mixed значений в вашем коде.
- Тип списка:
Все мы знаем, что массивы PHP действительно мощные, но они представляют одновременно несколько концепций в одной структуре данных, и иногда с этим трудно работать и иногда полезно сузить его, когда мы уверены, что нам нужна только одна концепция, например список.
/** @param list<int> $listOfIntegers */
public function doFoo(array $listOfIntegers): void
{
}
- Оптимизация потребление памяти + увеличена производительность работы
Была уменьшена прожорливость PhpStan и улучшена производительность, как в свое время это произошло с Composer с перехода 1 на 2 версию и это радует!
- Улучшена работа с кэширование и использования дискового пространства
Избавились от кэша без замедления анализа. Теперь меньше телодвижений, которые нужно сделать невалидными, меньше вещей, о которых нужно беспокоиться, меньше места на диске, которое нужно занимать.
Ну и первое что стоит в планах после релиза - это добавление поддержки PHP 8.4. Можно ожидать, что она будет добавлена до конца 2024 года.
GitHub
Release 2.0.1 · phpstan/phpstan
Bugfixes 🐛
fix: check for existence of second arg in CountCharsFunctionDynamicReturnTypeExtension (#3620), thanks @canvural!
Fix resolving tentative return type (phpstan/phpstan-src@753fc4d)
And f...
fix: check for existence of second arg in CountCharsFunctionDynamicReturnTypeExtension (#3620), thanks @canvural!
Fix resolving tentative return type (phpstan/phpstan-src@753fc4d)
And f...
🔥11👍4
Каждый раз поражаюсь титанической работой Алексея и Павла, если вы что-то упустили, то спокойно можете наверстать упущенное, прочитав статью.
👍3
Forwarded from PHP Fart Time (Алексей roxblnfk)
triangular-octopus-0f6 on Notion
В мире PHP #3 | Notion
Обосрались
Четвёртый выпуск "В мире PHP"
https://www.notion.so/PHP-3-1425a7ab4c6c802e88d2ce553b4dd2f3?pvs=4
⬆️ предыдущая часть
#Article #PHP #МыслиВслух
https://www.notion.so/PHP-3-1425a7ab4c6c802e88d2ce553b4dd2f3?pvs=4
⬆️ предыдущая часть
#Article #PHP #МыслиВслух
👍3🔥3
Кстати в PHP 8.4 есть одно интересное изменение, которое на первый взгляд не сильно что-то затрагивает, с другой стороны можно быть каверзно пойманным на собеседовании особо хитрым интервьюером, вопросом типа:
Являются ли exit() (или его псевдоним die()) функцией в PHP?
Тут, конечно же подразумевается, что exit - языковая конструкция, как мы это прекрасно знаем, но после выхода PHP 8.4 все изменится и теперь exit будет являться функцией, как в других аналогичных языках программирования, что вполне закономерно - чем меньше функций, которые на самом деле не являются функциями, тем лучше.
Ну и как мы знаем в сравнении с теми же "фейковыми-функциями-собратьями" типа require(), include(), isset(), empty(), print(), echo(), unset(), list() и т.д. которые подразумевают передачу выражения (или чего-то другого) в скобки, или даже без них, точнее скобки там воспринимаются как приоритет в тех же выражениях, то в exit можно не писать скобки.
Для совместимости, RFC позволит синтаксису все так же продолжать опускать скобки, то есть в принципе ничего не изменится, по сути это будет функция с возможностью не передавать аргумент и опускать скобки после:
Но чем еще примечательно это изменение, что учитывая направление, который выбрал PHP: быть более строже и предсказуемее, то есть вероятность, что в каком-нибудь PHP 8.5 объявят устаревшим вызов функции exit без скобок, а в следующей мажорной версии 9 вызов syntax error,
а так было удобно экономить время на опускании скобочек! 😁
Являются ли exit() (или его псевдоним die()) функцией в PHP?
Тут, конечно же подразумевается, что exit - языковая конструкция, как мы это прекрасно знаем, но после выхода PHP 8.4 все изменится и теперь exit будет являться функцией, как в других аналогичных языках программирования, что вполне закономерно - чем меньше функций, которые на самом деле не являются функциями, тем лучше.
Ну и как мы знаем в сравнении с теми же "фейковыми-функциями-собратьями" типа require(), include(), isset(), empty(), print(), echo(), unset(), list() и т.д. которые подразумевают передачу выражения (или чего-то другого) в скобки, или даже без них, точнее скобки там воспринимаются как приоритет в тех же выражениях, то в exit можно не писать скобки.
Для совместимости, RFC позволит синтаксису все так же продолжать опускать скобки, то есть в принципе ничего не изменится, по сути это будет функция с возможностью не передавать аргумент и опускать скобки после:
exit(string|int $status = 0): never {}exit; //все так же валидно
Но чем еще примечательно это изменение, что учитывая направление, который выбрал PHP: быть более строже и предсказуемее, то есть вероятность, что в каком-нибудь PHP 8.5 объявят устаревшим вызов функции exit без скобок, а в следующей мажорной версии 9 вызов syntax error,
а так было удобно экономить время на опускании скобочек! 😁
👍8👀1
Там Saki Takamachi релизнула PHP 8.4
- Страница релиза - есть✅
- Первый фикс PHP 8.4.1 есть✅
- Хорошее настроение - есть✅
- PPA Ondřej Surý PHP - пока нет❌
- Страница релиза - есть
- Первый фикс PHP 8.4.1 есть
- Хорошее настроение - есть
- PPA Ondřej Surý PHP - пока нет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19😁3
Залетаем на стрим,
https://www.youtube.com/live/UgNAvNmAizk?si=cbQFBBCYJoM6KoII
https://www.youtube.com/live/UgNAvNmAizk?si=cbQFBBCYJoM6KoII
YouTube
PHP 8.4: Обзор ключевых нововведений с экспертами | Большой стрим на CutCode!
Присоединяйтесь к масштабному обзору PHP 8.4 с ведущими экспертами PHP-сообщества! В прямом эфире разберем:
- Property hooks - долгожданное обновление спустя 10 лет
- Асимметричную область видимости свойств (private(set))
- Новый DOM API с HTML5
- Атрибут…
- Property hooks - долгожданное обновление спустя 10 лет
- Асимметричную область видимости свойств (private(set))
- Новый DOM API с HTML5
- Атрибут…
👍6
Доброй ночи и С Новым Годом!
Желаю всем в новом 2025 году счастья и благополучия!
Достижение поставленных целей, поменьше багов и перейти поскорей на PHP 8.4 🐘
Желаю быть оптимистично настроенными, не выгорать и не терять бодрости духа и ... слонов, как я, куда-то задевал своего, поэтому фоточка с прошлого года 😄
С Новым Годом, друзья!
Желаю всем в новом 2025 году счастья и благополучия!
Достижение поставленных целей, поменьше багов и перейти поскорей на PHP 8.4 🐘
Желаю быть оптимистично настроенными, не выгорать и не терять бодрости духа и ... слонов, как я, куда-то задевал своего, поэтому фоточка с прошлого года 😄
С Новым Годом, друзья!
❤12🎄9🔥1
Forwarded from Пых (Валентин Удальцов)
Пыхап 8 февраля!
Друзья, через 2.5 недели пройдёт второй Пыхап! В программе у нас снова 3 доклада и новая секция:
🤔 Шардирование в RabbitMQ
Антон Растрыгин расскажет, как разбирать очередь параллельно, но последовательно.
🤝 Гибкий проект с фича-флагами Unleash
Рустэм Ахметзянов объяснит, почему «друзья не позволяют друзьям делать самописную систему фича-флагов».
🤹 Реализация нейронной сети на PHP
Алексей Нечаев покажет, как создать нейронку, не написав ни строчки кода на Python!
🎤 Открытый микрофон (только офлайн)
В конце митапа любой участник сможет на 5-10 минут завладеть флипчартом и поделиться насущной проблемой, элегантным решением или историей про то, как уронил прод накануне в пятницу.
Пыхап пройдёт там же — в уютном лофте «Событие» на Таганке. В этот раз решили попробовать субботу, поэтому собираемся пораньше, в 16:30. Регистрация откроется на канале Пых в следующий понедельник в 15:00, не пропустите. Входной билет — 500₽. Ну и конечно же митап будет транслироваться на YouTube и VK Видео с записью.
Спонсор второго Пыхапа — PremiumBonus. PremiumBonus — эволюция управления клиентским опытом. Весь спектр цифровых маркетинговых инструментов для выстраивания эффективной коммуникации с клиентами. Уникальные продукты на основе самых актуальных современных трендов, таких как предиктивная аналитика и автоматизация маркетинговых акций с помощью ИИ.
Друзья, через 2.5 недели пройдёт второй Пыхап! В программе у нас снова 3 доклада и новая секция:
Антон Растрыгин расскажет, как разбирать очередь параллельно, но последовательно.
Рустэм Ахметзянов объяснит, почему «друзья не позволяют друзьям делать самописную систему фича-флагов».
Алексей Нечаев покажет, как создать нейронку, не написав ни строчки кода на Python!
В конце митапа любой участник сможет на 5-10 минут завладеть флипчартом и поделиться насущной проблемой, элегантным решением или историей про то, как уронил прод накануне в пятницу.
Пыхап пройдёт там же — в уютном лофте «Событие» на Таганке. В этот раз решили попробовать субботу, поэтому собираемся пораньше, в 16:30. Регистрация откроется на канале Пых в следующий понедельник в 15:00, не пропустите. Входной билет — 500₽. Ну и конечно же митап будет транслироваться на YouTube и VK Видео с записью.
Спонсор второго Пыхапа — PremiumBonus. PremiumBonus — эволюция управления клиентским опытом. Весь спектр цифровых маркетинговых инструментов для выстраивания эффективной коммуникации с клиентами. Уникальные продукты на основе самых актуальных современных трендов, таких как предиктивная аналитика и автоматизация маркетинговых акций с помощью ИИ.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Forwarded from Пых (Валентин Удальцов)
YouTube
PHP True Async: обсуждаем RFC с автором
1 марта Дмитрий опубликовал первую версию RFC "PHP True Async". Цели предложения: установить стандарт конкурентного программирования на PHP, разработать С-API, отрефакторить существующие функции и расширения.
В процессе бурного обсуждения в internals было…
В процессе бурного обсуждения в internals было…
PHP True Async: обсуждаем RFC с автором
Сегодня в 19:00 по Москве мы встретимся с Дмитрием и Вадимом, чтобы обсудить RFC PHP True Async и перспективы появления нативной асинхронности в PHP. Основные темы:
▸ Опыт других языков.
▸ Экосистемы AMPHP, ReactPHP, Swoole.
▸ Нужна ли в PHP structured concurrency? Как это согласуется с файберами?
▸ Будет ли поддержка многопоточности, как, например, в Go?
▸ На какие этапы будет разбит такой большой проект?
https://youtu.be/K9FnRQIzklM
https://vkvideo.ru/video-228746873_456239042
🎫 Авторы самых интересных вопросов в чате трансляции получат бесплатные билеты на третий Пыхап!
Для подготовки рекомендую изучить RFC, а также посмотреть доклад Вадима Чем вам не угодил асинхронный PHP? Другие полезные ссылки в первом анонсе.
Сегодня в 19:00 по Москве мы встретимся с Дмитрием и Вадимом, чтобы обсудить RFC PHP True Async и перспективы появления нативной асинхронности в PHP. Основные темы:
▸ Опыт других языков.
▸ Экосистемы AMPHP, ReactPHP, Swoole.
▸ Нужна ли в PHP structured concurrency? Как это согласуется с файберами?
▸ Будет ли поддержка многопоточности, как, например, в Go?
▸ На какие этапы будет разбит такой большой проект?
https://youtu.be/K9FnRQIzklM
https://vkvideo.ru/video-228746873_456239042
Для подготовки рекомендую изучить RFC, а также посмотреть доклад Вадима Чем вам не угодил асинхронный PHP? Другие полезные ссылки в первом анонсе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥2
Всем, привет! С прошлыми майскими праздниками, и с будущими тоже! 🎉
Во всех PHP сообществах наступила тишина, или все отдыхают, или усердно работают 😄
Так или иначе, под шумок апрельских и майских деньков ворвался и был одобрен RFC по добавлению новых функций для работы с массивами:
Как видно из названий, это функции для получения первого и последнего значения передаваемого массива. Примеры результатов:
И тут возможно возникнет вопрос? Что? Это было добавлено только что, неужели ранее подобных функций не было в PHP, языке в котором есть почти все что угодно для работы с массивами.
И действительно только что. Достаточно вспомнить, что массив в PHP - это монструозный комбайн всего, что только можно придумать. Соответственно метод "влоб" - получения элемента по нулевому индексу, не всегда даст ожидаемый результат:
Заглянем в недалекое прошлое, в 2018 год, PHP 7.3, в то время были приняты такие функции как
Но возможно для кого-то будет новостью, что в том же RFC предлагалось ввести так же такие функции как
Так вот с тех пор получать ключи стало проще, нежели ранешнее
Получение первого и последнего элементов массива тоже стало проще:
А что было до PHP 7.3? Кроме указанного способа по получению ключей, а затем значений, еще с PHP 4, были функции reset() и end(). Были, есть и будут :) И используя их можно получить вполне ожидаемый результат:
так зачем тогда все эти телодвижения по вводу новых функций?
Просто все существующие хитрости,семантически являются неправильным подходом, поскольку они изменяют внутреннее состояние массива. Кроме того, это также не работает должным образом для, например, массива, возвращаемого из функции или других подобных непредусмотренных случаев.
А как вы думаете, нужны ли были эти новые функции или итак по старинке справились бы?❓
Во всех PHP сообществах наступила тишина, или все отдыхают, или усердно работают 😄
Так или иначе, под шумок апрельских и майских деньков ворвался и был одобрен RFC по добавлению новых функций для работы с массивами:
array_first() и array_last() в PHP 8.5. Как видно из названий, это функции для получения первого и последнего значения передаваемого массива. Примеры результатов:
array_first([1, 2, 3]); // 1
array_first([2, 3]); // 2
array_first(['a' => 2, 'b' => 1]); // 2
array_first([null, 2, 3]); // null
array_first([]); // null
array_first([$obj, 2, 3]); // $obj
array_first([1])); // 1
array_first([true]); // true
array_last([1, 2, 3]); // 3
array_last([2, 3]); // 3
array_last(['a' => 2, 'b' => 1]); // 1
array_last([2, 3, null]); // null
array_last([]); // null
array_last([2, 3, $obj]); // $obj
array_last([1])); // 1
array_last([true]); // true
И тут возможно возникнет вопрос? Что? Это было добавлено только что, неужели ранее подобных функций не было в PHP, языке в котором есть почти все что угодно для работы с массивами.
И действительно только что. Достаточно вспомнить, что массив в PHP - это монструозный комбайн всего, что только можно придумать. Соответственно метод "влоб" - получения элемента по нулевому индексу, не всегда даст ожидаемый результат:
$array = [
"g" => 456,
2,
4 => "string"
];
var_dump($array[0]); //выдаст 2
[$first] = $array; // какая-нибудь деструктуризация выдаст тоже 2
Заглянем в недалекое прошлое, в 2018 год, PHP 7.3, в то время были приняты такие функции как
array_key_first() и array_key_last().Но возможно для кого-то будет новостью, что в том же RFC предлагалось ввести так же такие функции как
array_value_first() и array_value_last(), что логично возвращали бы значения первого и последнего элемента в массиве. Но эти функции были отклоненны, почему, не совсем понятно, может кто-то из подписчиков помнит и знает доподлинную причину отклонения, либо просто время не пришло, и нужны были дополнительные 7 лет для переосознания 😀Так вот с тех пор получать ключи стало проще, нежели ранешнее
array_keys($array)[0], а если еще массив был пустым, то обязательная проверка на пустоту или вообще увеличение когнитивной сложности реализации в виде циклов (что-то достаточно приближенно к современному программированию на каком-нибудь golang). Получение первого и последнего элементов массива тоже стало проще:
var_dump($array[array_key_first($array)]); // 456
var_dump($array[array_key_last($array)]); // "string"
А что было до PHP 7.3? Кроме указанного способа по получению ключей, а затем значений, еще с PHP 4, были функции reset() и end(). Были, есть и будут :) И используя их можно получить вполне ожидаемый результат:
var_dump(reset($array)); //456
var_dump(end($array));exit; // "string"
// или те же array_shift, array_pop тоже технически выполнят что нужно
var_dump(array_shift($array)); //456
var_dump(array_pop($array)); // "string"
так зачем тогда все эти телодвижения по вводу новых функций?
Просто все существующие хитрости,семантически являются неправильным подходом, поскольку они изменяют внутреннее состояние массива. Кроме того, это также не работает должным образом для, например, массива, возвращаемого из функции или других подобных непредусмотренных случаев.
А как вы думаете, нужны ли были эти новые функции или итак по старинке справились бы?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍13❤4
Forwarded from PHP Fart Time (Алексей roxblnfk)
Очередная токсик среда.
Как не хотелось не трогать сам PHP, но придётся, потому что моя жепь с этого немного подгорела на #RandomBeer в предыдущую пятницу.
PHP Lazy Objects
Как не хотелось не трогать сам PHP, но придётся, потому что моя жепь с этого немного подгорела на #RandomBeer в предыдущую пятницу.
PHP Lazy Objects
triangular-octopus-0f6 on Notion
PHP Lazy Objects | Notion
В PHP 8.4 добавили ленивые объекты и прокси (RFC , дока).
😢3🤬1
Forwarded from Пых (Валентин Удальцов)
К сожалению, на подготовку условия задачи и настройку Хобота на приём ответов потребовалось больше времени, чем мы ожидали. Поэтому мы переносим конкурс на 19:30 — приезжайте домой с работы, подписывайтесь на Пых.конф’25 и будьте готовы!
👍2
Forwarded from PHP Digest
С днем рождения, PHP! 🎉🐘💜
Мы сделали крутого лего слоника специально к 30-летию PHP:
https://www.youtube.com/watch?v=mmsKDVAvrbw
Будем разыгрывать несколько таких на PHPverse 17 июня:
https://lp.jetbrains.com/phpverse-2025/
Это бесплатный онлайн ивент от команды PhpStorm. Вернее ивент на самом деле офлайн — почти все ребятки из PHP Foundation, а также еще несколько core контрибьюторов PHP, и ребятки из сообщества приезжают в Амстердам в офис JetBrains.
Будем транслировать доклады Тейлора (Laravel), Николаса Грекаса (Symfony), Кевина Дунгласа (FrankenPHP) и других ребяток. Еще запишем всякого закулисья и выложим позже. Регистрируйтесь, чтоб не пропустить.
Ну а сегодня смотрим стрим на CutCode: https://www.youtube.com/live/85xnTYzVtgw
Мы сделали крутого лего слоника специально к 30-летию PHP:
https://www.youtube.com/watch?v=mmsKDVAvrbw
Будем разыгрывать несколько таких на PHPverse 17 июня:
https://lp.jetbrains.com/phpverse-2025/
Это бесплатный онлайн ивент от команды PhpStorm. Вернее ивент на самом деле офлайн — почти все ребятки из PHP Foundation, а также еще несколько core контрибьюторов PHP, и ребятки из сообщества приезжают в Амстердам в офис JetBrains.
Будем транслировать доклады Тейлора (Laravel), Николаса Грекаса (Symfony), Кевина Дунгласа (FrankenPHP) и других ребяток. Еще запишем всякого закулисья и выложим позже. Регистрируйтесь, чтоб не пропустить.
Ну а сегодня смотрим стрим на CutCode: https://www.youtube.com/live/85xnTYzVtgw
YouTube
Happy Birthday PHP! I'm building LEGO elephpant!
Want a lego elephpant? 🐘💜
We'll be giving away a few at PHPverse -- a free online event to celebrate PHP's 30th anniversary:
https://lp.jetbrains.com/phpverse-2025/
We'll be giving away a few at PHPverse -- a free online event to celebrate PHP's 30th anniversary:
https://lp.jetbrains.com/phpverse-2025/
🔥10❤2👍1
Валентин Удальцов и канал Пых открыли продажу билетов на Пых.конф 2025, думаю билеты долго висеть не будут)) разбираем пока есть возможность
P.S. Я свой уже взял)
P.S. Я свой уже взял)
🔥3
Forwarded from Пых.конф’25 — главное PHP-событие этого года!
Media is too big
VIEW IN TELEGRAM
Пых.конф — новая PHP-конференция для всех от автора канала Пых Валентина Удальцова.
Единый язык. Кто-то из нас пишет на Yii и Laravel, другие выбирают Битрикс и WordPress, третьи экспериментируют с AMPHP и Swoole. Проекты разные. Подходы разные. Но язык один — PHP. Пых.конф даёт слово каждому!
Пространство PHP. Пых.конф объединяет русскоязычное PHP-сообщество в одной точке. Здесь делятся опытом, находят единомышленников и обсуждают, как проектировать, разрабатывать и поддерживать любые бэкенды на PHP.
Сегодня мы запускаем сайт и открываем продажи билетов по цене для ранних пташек!
Заходи на conf.phpyh.ru и забирай свой билет за 10 000 руб. до 10 июня 14:00!
YouTube | VK Видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2👀1
Forwarded from Пых (Валентин Удальцов)
В PHP 8.5 наконец-то будет clone with!
Как-то незаметно в PHP 8.5 приняли долгожданный RFC https://wiki.php.net/rfc/clone_with_v2.
1. Клонирование теперь не только языковая конструкция, но и функция
2. Вторым аргументом можно передать новые значения свойств для склонированного экземпляра. Переопределить можно любые видимые в текущей области свойства, в том числе
Почему это важная фича и как без неё обходиться прямо сейчас, подробно рассказал Brent Roose в ролике📹 Cloning Readonly Classes in PHP 8.2.
____________
До конца завтрашнего дня билеты на Пых.конф’25 всего по 12 000 рублей!
Как-то незаметно в PHP 8.5 приняли долгожданный RFC https://wiki.php.net/rfc/clone_with_v2.
1. Клонирование теперь не только языковая конструкция, но и функция
clone(object $object, array $withProperties = []): object. Благодаря этому можно писать array_map(clone(...), $myObjects).2. Вторым аргументом можно передать новые значения свойств для склонированного экземпляра. Переопределить можно любые видимые в текущей области свойства, в том числе
readonly, что наконец-то даёт нам полный инструментарий для работы с иммутабельными структурами:
final readonly class Request
{
public function __construct(
public string $path = '',
public array $headers = [],
) {}
public function withPath(string $path): self
{
return clone($this, ['path' => $path]);
}
public function withHeader(string $name, string $value): self
{
return clone($this, ['headers' => [
...$this->headers,
$name => $value,
]]);
}
}
new Request()
->withPath('/phpyh')
->withHeader('Content-Type', 'application/json');
Почему это важная фича и как без неё обходиться прямо сейчас, подробно рассказал Brent Roose в ролике
____________
До конца завтрашнего дня билеты на Пых.конф’25 всего по 12 000 рублей!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5❤2