Проба пера. Звук говно, но впредь будем за этим следить.
https://youtu.be/9tBh7jwO170
https://youtu.be/9tBh7jwO170
YouTube
Обсуждение проблемы Laravel Livewire пакета
В этом видео мы с Алексеем разбираем некоторе проблемы #Laravel #Livewire
Наше новое видео, звук уже лучше. Скоро купим микрофоны!
https://youtu.be/Yv74M_r_AKY
https://youtu.be/Yv74M_r_AKY
YouTube
Про Laravel, Spiral и пятиминутку с Валентином Удальцовым
Ссылка на подкаст https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zb3VuZGNsb3VkLmNvbS91c2Vycy9zb3VuZGNsb3VkOnVzZXJzOjE1MzUxOTY1My9zb3VuZHMucnNz/episode/NjRhYzc5YjMtMGJmNC00Y2VmLTg0NDgtNDIxYTBkYjJmOGU3?ep=14
Картинка к предыдущему подкасту
https://t.me/ebanoePHP/755
https://t.me/ebanoePHP/755
Telegram
ebanoePHP
Пояснение для дебилов:
- Подъезжает Laravel на ламбо. RoadRunner (полицейский) предъявляет ему требование Long Running
- Laravel берёт Octane и отпиливает ноги
- RoadRunner смотрит на калеку
- На фоне пробегает Spiral Framework
- Spiral Framework проектировался…
- Подъезжает Laravel на ламбо. RoadRunner (полицейский) предъявляет ему требование Long Running
- Laravel берёт Octane и отпиливает ноги
- RoadRunner смотрит на калеку
- На фоне пробегает Spiral Framework
- Spiral Framework проектировался…
Вы только посмотрите на эту крутотень!
Мельком показываем xhprof с багрегатором
https://youtu.be/h9JLmRRHZ48
Мельком показываем xhprof с багрегатором
https://youtu.be/h9JLmRRHZ48
YouTube
Релизим Spiral Framework 3.6 | xhprof в Buggregator
- Релиз Spiral Framework 3.6
https://github.com/spiral/framework/releases/tag/3.6.0
- Вопросы из глубинки
- Демонстрация профайлинга (xhprof) в Buggregator и Spiral
https://github.com/buggregator/spiral-app
https://github.com/spiral/profiler
Заходите…
https://github.com/spiral/framework/releases/tag/3.6.0
- Вопросы из глубинки
- Демонстрация профайлинга (xhprof) в Buggregator и Spiral
https://github.com/buggregator/spiral-app
https://github.com/spiral/profiler
Заходите…
Скоро запроцессится ещё одно
https://youtu.be/lpOax1iGVkE
Релизим Spiral инсталлятор, сосисочная вечеринка на 6 персон
https://youtu.be/lpOax1iGVkE
Релизим Spiral инсталлятор, сосисочная вечеринка на 6 персон
Новый видосик.
Смотрим новую бенч-либу
https://youtu.be/bQqbyjuaQ_I
Смотрим новую бенч-либу
TheDragonCode/benchmark
и бенчим функции поиска по массиву по dotted path
в #Yii #Laravel и #Spiralhttps://youtu.be/bQqbyjuaQ_I
YouTube
🚀Бенчмаркинг функций поиска по массиву, изучаем #Spiral фичи и обсуждаем контрибьютинг в #opensource
В этом видео мы рассмотрим три интересные темы, которые могут помочь вам улучшить ваши навыки разработки и внести свой вклад в сообщество:
1️⃣ Бенчмаркинг функций для поиска по массиву:
Мы проведем тесты на производительность функций поиска используемых…
1️⃣ Бенчмаркинг функций для поиска по массиву:
Мы проведем тесты на производительность функций поиска используемых…
Рассматриваем Storybook в контексте обновления фронтовой части нового Buggregator.
Поверхностное рассмотрение демонстрационного проекта
https://youtu.be/Zk9E3ZBDtb8
Вуху, у нас есть чат! Теперь наши высеры можно комментировать! :)
Поверхностное рассмотрение демонстрационного проекта
Ticket Booking
, в котором интегрировано всё сразу: #Spiral, #Zipkin, #Birddog, #OpenTelemetry, #Grafana, #RoadRunner, #Centrifugo и #Temporalio. https://youtu.be/Zk9E3ZBDtb8
Вуху, у нас есть чат! Теперь наши высеры можно комментировать! :)
YouTube
🔥 Обсуждение #Buggregator #Storybook, Ticket Booking с #OpenTelemetry и Real-time Chat с #Centrifugo
В этом видео мы погрузимся в мир разработки и обсудим следующие темы:
1️⃣ Будущее и текущая стадия разработки #Buggregator. Мы поговорим о #Storybook, #Nuxt3 и #Vue3, которые были внедрены в проект.
2️⃣ Рассмотрим систему Ticket Booking - демо проект показывающий…
1️⃣ Будущее и текущая стадия разработки #Buggregator. Мы поговорим о #Storybook, #Nuxt3 и #Vue3, которые были внедрены в проект.
2️⃣ Рассмотрим систему Ticket Booking - демо проект показывающий…
PHP Fart Time
https://youtu.be/IGRI4I_nnQM Репка с бечами https://github.com/php-fart/benchmarks-serializers
Хотел, было, добавить детализации в тексте поста, но при работе с цифрами бенчей возникли вопросы.
Как этот инструмент считает avg?
Оказывается, при расчёте среднего значения исключаются 10% максимальных и 10% минимальных значений. Not bad.
Как этот инструмент считает avg?
Оказывается, при расчёте среднего значения исключаются 10% максимальных и 10% минимальных значений. Not bad.
Пилим очереди в Spiral Framework с различными сериализаторами.
- JSON
- Native serializer
- Symfony Serializer
- Laravel Serializable Closure
- protobuf
- valinor
https://youtu.be/f2YvmYFkAyo
- JSON
- Native serializer
- Symfony Serializer
- Laravel Serializable Closure
- protobuf
- valinor
https://youtu.be/f2YvmYFkAyo
YouTube
Тестируем очереди в Spiral Framework с различными сериализаторами. #queue #spiral
Тестируем очереди в Spiral Framework с различными сериализаторами.
- JSON
- Native serializer
- Symfony Serializer
- Laravel Serializable Closure
- protobuf
- valinor
Ссылки
1. PSR-7 - https://www.php-fig.org/psr/psr-7/
2. PER - https://www.php-fig.org/per/coding…
- JSON
- Native serializer
- Symfony Serializer
- Laravel Serializable Closure
- protobuf
- valinor
Ссылки
1. PSR-7 - https://www.php-fig.org/psr/psr-7/
2. PER - https://www.php-fig.org/per/coding…
#Hint
А я напомню, что атрибуты можно использовать и в PHP 7.4 с помощью пакета
А я напомню, что атрибуты можно использовать и в PHP 7.4 с помощью пакета
spiral/attributes:^2.7
https://t.me/isPHPdying/143Telegram
PHP умирает?!
#Article #Типизация #php
#️⃣ Типизация PHP
Наверное буду кэпом, если скажу, что следование строгим типам и избежание неявных преобразований уменьшает магичность кода, что ведёт к стабильности и надёжности.
Поэтому в коде Spiral, Cycle и других наших продуктов мы используем строгую типизацию, где это возможно.
Вроде тема понятная, но... это же PHP. А значит без нюансов не обойтись 💩
⭕️ declare(strict_types=1);
Прям из доки: по умолчанию, PHP будет преобразовывать значения неправильного типа в ожидаемые. ...
Можно включить режим строгой типизации на уровне файла.
В этом режиме, тип значения должен строго соответствовать объявленному, иначе будет выброшено исключение
Единственным исключением из этого правила является передача значения типа
⚠️ На вызовы из внутренних функций, действие
Обратите внимание на предупреждение. Многие core-функции не следуют строгости типов.
Например,
А вот
Рефлексия тоже не следует строгости. Поэтому вместо
Оно, может, чуть медленнее, но зато надёжнее.
Теперь к костылям.
⭕️ Типизация переменных
С помощью несложного текучего костыля можно привязать тип к переменной.
Не делайте так.
⭕️ PHP 8.2
Типы
Зачем это надо? Для вариантности. Например, при расширении метода возвращаемое значение с
Завезли DNF (Disjunctive Normal Form).
Вот такого мутанта теперь можно будет встретить в коде:
ℹ️ Всегда явно указывайте тип nullable параметров (
ℹ️ Тип
ℹ️ Тип
Как же принять callable и записать в свойство? Например так:
Может у вас есть какие-то мысли, нюансы или лайфхаки вокруг типов PHP? Поделитесь в комментариях
#️⃣ Типизация PHP
Наверное буду кэпом, если скажу, что следование строгим типам и избежание неявных преобразований уменьшает магичность кода, что ведёт к стабильности и надёжности.
Поэтому в коде Spiral, Cycle и других наших продуктов мы используем строгую типизацию, где это возможно.
Вроде тема понятная, но... это же PHP. А значит без нюансов не обойтись 💩
⭕️ declare(strict_types=1);
Прям из доки: по умолчанию, PHP будет преобразовывать значения неправильного типа в ожидаемые. ...
Можно включить режим строгой типизации на уровне файла.
В этом режиме, тип значения должен строго соответствовать объявленному, иначе будет выброшено исключение
TypeError
.Единственным исключением из этого правила является передача значения типа
int
туда, где ожидается float
.⚠️ На вызовы из внутренних функций, действие
strict_types
не распространяется.Обратите внимание на предупреждение. Многие core-функции не следуют строгости типов.
Например,
array_map()
и array_filter()
сделают неявное приведение типов.print_r(array_map(fn(int $a, int $b) => $a + $b, [1, '10', 3], [4, 5, '1e2']));
---
Array (
[0] => 5
[1] => 15
[2] => 103
)
А вот
call_user_func()
будет ругаться на несоответствие типов.Рефлексия тоже не следует строгости. Поэтому вместо
newInstanceArgs
/newInstance
в фабрике контейнера у нас $instance = new $class(...$arguments);
.Оно, может, чуть медленнее, но зато надёжнее.
Теперь к костылям.
⭕️ Типизация переменных
С помощью несложного текучего костыля можно привязать тип к переменной.
function makeInt(int &$i): void
{
static $list = [];
$list[] = $obj = new class() {
public int $i;
};
$obj->i = &$i;
}
$int = 1;
makeInt($int);
$int = 42; // 42
$int = 'foo'; // Fatal error: Uncaught TypeError: Cannot assign string...
Не делайте так.
⭕️ PHP 8.2
Типы
null
, false
и true
теперь можно использовать автономно.Зачем это надо? Для вариантности. Например, при расширении метода возвращаемое значение с
bool
можно сузить до true
или false
, а nullable (?Foo
) — до null
. Таких кейсов в библиотеках не мало.Завезли DNF (Disjunctive Normal Form).
Вот такого мутанта теперь можно будет встретить в коде:
(Countable&Traversable)|array
ℹ️
Что интересно, nullable-сахар (?Foo
) был добавлен в PHP 7.1 ещё до Union Types.ℹ️ Всегда явно указывайте тип nullable параметров (
?Foo $foo = null
) а не полагайтесь только на значение null
по умолчанию (Foo $foo = null
).ℹ️ Тип
never
был добавлен в PHP 8.1. Но он вряд ли вам пригодится, если вы гоняете на RoadRunner.ℹ️ Тип
callable
существует только в сигнатурах функций и методов. Его нельзя указать для свойств, а значит и в Promoted properties не засунуть. А всё потому, что в разных контекстах callable
может быть разным.Как же принять callable и записать в свойство? Например так:
// A class declaration
private \Closure $callback;
public function __construct(callable $callback)
{
$this->callback = $callback(...);
}
Может у вас есть какие-то мысли, нюансы или лайфхаки вокруг типов PHP? Поделитесь в комментариях