Пых
Мои слайды: https://vudaltsov.github.io/php83-slides/
new MyClass()->method() без скобок!
Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через
Поддерживаются также динамические имена классов и анонимные классы (см. тесты).
После первичного одобрения сделаю RFC. Пока накидайте лайков в PR, пожалуйста.
https://github.com/php/php-src/pull/13029
Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через
new
, не оборачивая их в скобки. Во избежание неоднозначности работать будет только при наличии скобок аргументов конструктора.
final class A
{
const CONSTANT = 'constant';
public static $staticProperty = 'staticProperty';
public static function staticMethod() {}
public $property = 'property';
public function method() {}
public function __invoke() {}
}
new A()::CONSTANT;
new A()::$staticProperty;
new A()::staticMethod();
new A()->property;
new A()->method();
new A()();
Поддерживаются также динамические имена классов и анонимные классы (см. тесты).
После первичного одобрения сделаю RFC. Пока накидайте лайков в PR, пожалуйста.
https://github.com/php/php-src/pull/13029
Пых
new MyClass()->method() без скобок! Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через new, не оборачивая их в скобки. Во избежание неоднозначности…
Разберу самый частый комментарий к моему PR.
Многие полагают, что конструкция
Грамматика для new выглядит следующим образом:
Мой PR никак не нарушает ничего из вышесказанного, лишь делает скобки вокруг всего new-выражения опциональными. По сути, это как вместо
Подтверждением моих слов служит также и то, что по изменённой мной грамматике Bison безошибочно генерирует LR(1) парсер, который потом успешно компилируется в PHP и проходит все тесты. LR(1) парсер является детерминированным и не допускает неоднозначностей в описании грамматики.
Многие полагают, что конструкция
new A()->method()
неоднозначна. Это заблуждение. По этой логике само выражение new A()
в текущем PHP тоже неоднозначно, потому что можно представить, что сначала вызывается функция A()
, а потом к её результату применяется new
. Но это не так.Грамматика для new выглядит следующим образом:
T_NEW class_name_reference constructor_arguments
, где class_name_reference
— это либо class_name
, либо new_variable
, либо (expr)
(именно в скобках). В свою очередь new_variable
организована специально для new
таким образом, что в ней не может быть вызовов со скобками. Получается, что сечайс в PHP мы можем создать объект через new
тремя способами: new MyClass()
, new $class()
, new (getMyClass())()
. То есть если хочется для имени класса использовать полноценное выражение с вызовами, нужно обязательно обернуть его в дополнительные скобки. Таким образом разрешается эта неоднозначность.Мой PR никак не нарушает ничего из вышесказанного, лишь делает скобки вокруг всего new-выражения опциональными. По сути, это как вместо
(MyClass::new())->method()
писать просто MyClass::new()->method()
. Приоритет однозначен и не требует уточнения, код легко читается слева направо. В Java и C# испокон веков можно писать именно так. То, что для вас сейчас непривычно, для джавистов и шарпистов — база.Подтверждением моих слов служит также и то, что по изменённой мной грамматике Bison безошибочно генерирует LR(1) парсер, который потом успешно компилируется в PHP и проходит все тесты. LR(1) парсер является детерминированным и не допускает неоднозначностей в описании грамматики.
GitHub
php-src/Zend/zend_language_parser.y at 2e12e80ac446de8381feb8932acd6ab787dd7401 · php/php-src
The PHP Interpreter. Contribute to php/php-src development by creating an account on GitHub.
Пых
Разберу самый частый комментарий к моему PR. Многие полагают, что конструкция new A()->method() неоднозначна. Это заблуждение. По этой логике само выражение new A() в текущем PHP тоже неоднозначно, потому что можно представить, что сначала вызывается функция…
Ilija Tovilio, на текущий момент один из самых активных контрибьюторов в PHP, только что дал мне карму для публикации RFC и пожелал удачи! Буду считать это хорошим знаком! 💪
https://externals.io/message/122052#122053
https://externals.io/message/122052#122053
Please open Telegram to view this post
VIEW IN TELEGRAM
C Новым Годом, дорогие подписчики! 🎩
Только что вдумчиво прошёл опрос от phpcommunity.ru. Всем, кому, как и мне, было некогда в конце года, предлагаю сделать это прямо сейчас — до закрытия опроса осталось 3 дня.
Результаты будут в конце января, из них мы узнаем демографию пыхаря и его предпочтения в технологиях, а также получим список самых крутых статей, видео и докладов в 2023 году.
https://forms.gle/n9QErGz5iGYrWEzj9
Только что вдумчиво прошёл опрос от phpcommunity.ru. Всем, кому, как и мне, было некогда в конце года, предлагаю сделать это прямо сейчас — до закрытия опроса осталось 3 дня.
Результаты будут в конце января, из них мы узнаем демографию пыхаря и его предпочтения в технологиях, а также получим список самых крутых статей, видео и докладов в 2023 году.
https://forms.gle/n9QErGz5iGYrWEzj9
Please open Telegram to view this post
VIEW IN TELEGRAM
Публичный собес на Senior PHP разработчика!
Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым.
У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён первого собеседования на PHP Point придумал новые вопросы по PHP и вокруг него, так что мне самому очень интересно, что у нас получится!
Подключайтесь завтра к YouTube трансляции или в Zoom, а также подписывайтесь на Telegram-канал { между скобок }, чтобы не пропустить анонсы других крутых стримов.
Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым.
У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён первого собеседования на PHP Point придумал новые вопросы по PHP и вокруг него, так что мне самому очень интересно, что у нас получится!
Подключайтесь завтра к YouTube трансляции или в Zoom, а также подписывайтесь на Telegram-канал { между скобок }, чтобы не пропустить анонсы других крутых стримов.
Пых
Публичный собес на Senior PHP разработчика! Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым. У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён…
YouTube
Валентин Удальцов, Виталий Лихачев: Публичное собеседование Senior Software Engineer (PHP)
Публичное собеседование на Senior PHP. Разберемся какие сейчас актуальные вопросы по PHP обсуждают на собеседованиях - паттерны разработки, полиморфизм/вариантность в чистом PHP, SOLID, DDD, микросервисные паттерны.
Проводить собеседование будет Валентин…
Проводить собеседование будет Валентин…
Нужен алгоритмист для публичного собеседования!
Канал, у нас тут в Пыхтелке назрела идея провести публичныйлиткод собес по алгоритмам на канале PHP Point. Собеседуемый — отважный Иван Лещёв из Авито. А вот интервьюер сходу не нашёлся.
Отпишитесь в комментариях, кто готов задать ему жару!
Update. Всё, интервьюер есть, ждите анонса.
Канал, у нас тут в Пыхтелке назрела идея провести публичный
Отпишитесь в комментариях, кто готов задать ему жару!
Update. Всё, интервьюер есть, ждите анонса.
Telegram
Иван Лещёв
да, я пишу на PHP
Всех люблю! ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
В Питере — Пых!*
15 февраля на Live PHP SPb будет мощный лайн-ап:
▸ Кирилл Несмеянов продемонстрируетАнастейше все оттенки асинхронности,
▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов,
▸ ну а я расскажу про половой полиморфизм туркестанского термита.
Ждём всех завтра в 19:00 в баре Failover (к сожалению, только тех, кто ранее прошёл регистрацию) и в трансляции.
* Автор заголовка — Дима Елисеев, завтра мы попробуем его обыграть. 😉
15 февраля на Live PHP SPb будет мощный лайн-ап:
▸ Кирилл Несмеянов продемонстрирует
▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов,
▸ ну а я расскажу про половой полиморфизм туркестанского термита.
Ждём всех завтра в 19:00 в баре Failover (к сожалению, только тех, кто ранее прошёл регистрацию) и в трансляции.
* Автор заголовка — Дима Елисеев, завтра мы попробуем его обыграть. 😉
Пых
В Питере — Пых!* 15 февраля на Live PHP SPb будет мощный лайн-ап: ▸ Кирилл Несмеянов продемонстрирует Анастейше все оттенки асинхронности, ▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов, ▸ ну а я расскажу про половой полиморфизм…
00:00 Все оттенки асинхронности (Кирилл)
55:01 Полиморфизм в современном PHP (Валентин)
2:00:29 Переносимое окружение для разработки и тестов (Дмитрий)
Мои слайды: https://vudaltsov.github.io/polymorphism/
Слайды ребят: https://www.tg-me.com/live_php/6671
55:01 Полиморфизм в современном PHP (Валентин)
2:00:29 Переносимое окружение для разработки и тестов (Дмитрий)
Мои слайды: https://vudaltsov.github.io/polymorphism/
Слайды ребят: https://www.tg-me.com/live_php/6671
Пых
Нужен алгоритмист для публичного собеседования! Канал, у нас тут в Пыхтелке назрела идея провести публичный литкод собес по алгоритмам на канале PHP Point. Собеседуемый — отважный Иван Лещёв из Авито. А вот интервьюер сходу не нашёлся. Отпишитесь в комментариях…
Через 2 часа встречаемся на канале PHP Point, чтобы посмотреть схватку двух бессменных админов Пыхтелки: Сергея и Ивана. Второй собес на канале спустя 3 года!
Готовьтесь похоливарить в комментариях про ценность алгоритмических задач при тестировании бэкенд-разработчиков.
https://youtu.be/ZPGjJDIZm4Y
https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Публичное собеседование по алгоритмам • Сергей Милимко vs Иван Лещёв
Задачи и решения: https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Подписывайтесь на наши каналы в Telegram:
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! https://www.tg-me.com/isPHPdying.
Подписывайтесь на наши каналы в Telegram:
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! https://www.tg-me.com/isPHPdying.
Тест на циклические ссылки
Как проверить, что объект не содержит циклических ссылок и автоматически высвобождается из памяти?
Оказывается, очень просто: через WeakReference. После зачистки переменной WeakReference будет пустым, если других ссылок на объект не останется. Первый тест на скриншоте из Typhoon Reflection. Он помог мне найти несколько проблем и улучшить архитектуру библиотеки.
Аналогичный тест для PHP Parser, например, не пройдёт. Парсер ссылается сам на себя через анонимные функции, записанные в приватное свойство, и не может быть автоматически утилизирован, см. мой тикет. Тривиально исправить там вроде не получится, нужно менять архитектуру, поэтому PR я пока не делал.
Имеет смысл задумываться о таких вещах, так как выключение GC ускоряет PHP, да и в целом циклические зависимости — антипаттерн.
Update: Никита пофиксил парсер.
Как проверить, что объект не содержит циклических ссылок и автоматически высвобождается из памяти?
Оказывается, очень просто: через WeakReference. После зачистки переменной WeakReference будет пустым, если других ссылок на объект не останется. Первый тест на скриншоте из Typhoon Reflection. Он помог мне найти несколько проблем и улучшить архитектуру библиотеки.
Аналогичный тест для PHP Parser, например, не пройдёт. Парсер ссылается сам на себя через анонимные функции, записанные в приватное свойство, и не может быть автоматически утилизирован, см. мой тикет. Тривиально исправить там вроде не получится, нужно менять архитектуру, поэтому PR я пока не делал.
Имеет смысл задумываться о таких вещах, так как выключение GC ускоряет PHP, да и в целом циклические зависимости — антипаттерн.
Update: Никита пофиксил парсер.
Пых
В прошлый раз решили не растягивать стрим и отложили третью, самую сложную задачу. Поэтому завтра в
12:00
мы снова соберёмся, чтобы завершить собеседование. Присоединяйтесь!https://youtu.be/Wa9hUi8NeTs
https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Публичное собеседование по алгоритмам • Сергей Милимко vs Иван Лещёв • Часть 2
Первая часть: https://youtu.be/ZPGjJDIZm4Y
Задачи и решения: https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Подписывайтесь на наши каналы в Telegram:
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! http…
Задачи и решения: https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Подписывайтесь на наши каналы в Telegram:
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! http…
Задача для любителей трейтов
На этой неделе я добавил полную поддержку трейтов в Typhoon Reflection 0.3.x. Вдохновившись полученными знаниями, придумал вам задачку:
На этой неделе я добавил полную поддержку трейтов в Typhoon Reflection 0.3.x. Вдохновившись полученными знаниями, придумал вам задачку:
trait T
{
abstract public function x(): void;
}
final class C
{
use T {
x as x1;
x as x2;
}
use T {
x as x3;
}
// Сколько методов тут надо добавить?
}
Пых
Задача для любителей трейтов На этой неделе я добавил полную поддержку трейтов в Typhoon Reflection 0.3.x. Вдохновившись полученными знаниями, придумал вам задачку: trait T { abstract public function x(): void; } final class C { use T { …
Сколько методов нужно имплементировать в классе C, чтобы он стал корректным?
Anonymous Quiz
31%
1
26%
3
12%
4
30%
В классе C уже есть ошибка в use, методами его не спасти
Forwarded from Галера Морева
Прямой эфир с Валентином Удальцовым
Когда-то давно я делал стрим с Валентином, где мы общались про него, его опыт, немного про PHP и планы на будущее.
Будущее наступило — прошло почти 4 года и сегодня Валентин приедет ко мне в гости и мы проведем еще один прямой эфир и пообщаемся на разные темы.
Мне лично интересно обсудить как он решился на запуск своего образовательного проекта после стольких лет стабильной работы фуллтайм и как ему это нравится (или нет).
Правила для зрителей стандартные — задавайте вопросы и автору самого лучшего вопроса положена пицца за мой счет:)
Начнем в 19.00 сегодня!
Стрим будет тут: youtube.com/live/QPdhrhY0UGY
Когда-то давно я делал стрим с Валентином, где мы общались про него, его опыт, немного про PHP и планы на будущее.
Будущее наступило — прошло почти 4 года и сегодня Валентин приедет ко мне в гости и мы проведем еще один прямой эфир и пообщаемся на разные темы.
Мне лично интересно обсудить как он решился на запуск своего образовательного проекта после стольких лет стабильной работы фуллтайм и как ему это нравится (или нет).
Правила для зрителей стандартные — задавайте вопросы и автору самого лучшего вопроса положена пицца за мой счет:)
Начнем в 19.00 сегодня!
Стрим будет тут: youtube.com/live/QPdhrhY0UGY
Новая система типов • Трейты • Атрибуты • Совместимость с родной рефлексией • Монорепо
Жду всех на PHP Point сегодня в
19:00
. Про третий поток тоже расскажу.https://youtu.be/zW0wNb_2i2s
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Typhoon 0.3.0 • Новая система типов • Трейты • Атрибуты • Совместимость с родной рефлексией
Подписывайтесь на наши каналы в Telegram:
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! https://www.tg-me.com/isPHPdying.
Поддержите канал на Boosty: https://boosty.to/phpyh.
• Пых https://www.tg-me.com/phpyh,
• PHP Digest https://www.tg-me.com/phpdigest,
• PHP умирает?! https://www.tg-me.com/isPHPdying.
Поддержите канал на Boosty: https://boosty.to/phpyh.
Пых
Typhoon — бескомпромиссная статическая рефлексия для PHP с поддержкой phpDoc-типов и резолвингом дженериков.
https://github.com/typhoon-php/typhoon/releases/tag/0.3.0
https://youtu.be/zW0wNb_2i2s
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release 0.3.0 New type system, traits, attributes support · typhoon-php/typhoon
New type system.
Traits, attributes, class constants support.
Native reflection compatibility.
Traits, attributes, class constants support.
Native reflection compatibility.
Ну что ж, после релиза Typhoon с чувством выполненного долга возвращаюсь к
Набор на третий поток будет осуществляться так же, как в прошлый раз. Завтра (4 марта) в 15:00 по Москве на канале Пых появится ссылка на срез знаний. При проверке я сначала буду отбирать анкеты с правильными ответами, а потом ранжировать их по времени. Удачи!
https://vudaltsov.notion.site/PHP-d4be63d0b6b7486787861fdbab080d1c
Please open Telegram to view this post
VIEW IN TELEGRAM