Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
加入频道
#github #library

Мы часто используем коллекции элементов: коллекции строк, чисел, объектов. Коллекции предоставляют удобный API по добавлению, удалению, обходу, слиянию, фильтрации элементов и многому другому. Ниже собран список самых популярных на данный момент коллекций.

https://github.com/loophp/collection

https://github.com/ramsey/collection

https://github.com/schmittjoh/php-collection

https://github.com/illuminate/collections

https://github.com/doctrine/collections
Вакансия: автор образовательных курсов в сфере IT

Кого мы ищем? Профессионала c опытом создания образовательного IT-контента для специалистов уровня middle.

Обязанности:
- Составление учебной программы
- Подготовка текстовых материалов курса: методические материалы, домашние задания, программный код

Требования:
Владение инструментами разработчика, одним или несколькими языками программирования:
– Python
– HTML, CSS, JS
– Java
– SQL

Условия работы. Нам интересно длительное сотрудничество, работаем удалённо. Загрузка: 10-14 тыс. знаков в день, оплата: от 450 руб. за 1000 знаков.

В отклике на вакансию укажите образование, опыт работы и ссылки на ваши материалы.

Контакт для связи: @proglib_producer
Вакансия: спикер (преподаватель) образовательных IT-курсов

Кого мы ищем? Разработчиков с опытом публичных выступлений.

Обязанности:
– Запись видеокурсов по подготовленным нашими авторам материалам
– Проверка домашних заданий студентов

Требования. Нам важно, чтобы спикер обладал грамотной речью и хорошей дикцией, имел навыки программирования на одном или нескольких языках
– Python
– HTML, CSS, JS
– Java
– SQL

Условия работы. Мы рассчитываем на долгосрочное сотрудничество. Загрузка от 5 часов в неделю, оплата — от 1500 рублей за час съемки. Работа в нашей студии в Москве.

В отклике на вакансию укажите образование, опыт выступлений и разработки. Будет классно, если вы сможете записать краткий видеорассказ о себе — 30-40 секунд.

Контакт для связи: @vlad_proglib
#laravelshit

Ребята из spatie делают не только пакеты среднего уровня качества, но и рекомендуют и пишут статьи не лучше своих пакетов. Например, статья под гордым названием «5 простых советов» на самом деле рекламирует как минимум три ужасных:

1. Предлагается использовать User::all()->dd() вместо dd(User::all()), ссылаясь на то, что разработчиков может раздражать необходимость заводить переменную для вызова dd. Зато разработчиков не раздражает дебажить код с помощью dd вместо xdebug и тянуть на продакшн код для дебага https://github.com/laravel/framework/blob/8.x/src/Illuminate/Database/Query/Builder.php#L3406-L3409 (🤦‍♂️).

2. Используйте Auth::id() вместо Auth::user()->id(), – гордо кричит автор статьи, предлагая заменить один кусок говна плохого кода другим. Чтобы уяснить для себя, почему это плохо, советую прочитать данный тред со ссылкой на оригинальный твит, приведенный в статье, https://twitter.com/pierrejoye/status/1286441723724324864?s=21.

3. "Используйте ->withDefault() при определении отношений, чтобы в случае отсутствия модели получать пустышку". Как и автор статьи, документация заявляет, что это пример реализации паттерна Null Object, но это не так. Null Object нужен, чтобы соответствовать типу и ничего не делать (например, NullLogger), а null от объекта модели только вводит в ступор: придется проверять на существование id модели, чтобы отличить его от реальных данных, что не сильно отличается от if ($post->user === null).

https://ryangjchandler.co.uk/posts/5-simple-laravel-tips-and-tricks
#symfony #advanced

Все знают про мощный Dependency Injection компонент Symfony. Также он поддерживает работу с переменными окружения – не только их загрузкой, но и их валидацией и приведением к типам.

Например, если вы хотите получить переменную как int, вы можете сделать так:

AppSomeService:
arguments:
$timeout: '%env(int:SOME_TIMEOUT)%'


Также он может проверить файл на существование:

%env(file:PRIVATE_KEY)%


Больше процессоров можно найти тут.

Недавно нам потребовалось из строки получать массив, где каждый элемент должен быть числом. Написали свой процессор. Можно указать любой разделитель и привести к int/float:

%env(explode:dot:integer:SOME_ENV)%
%env(explode:comma:integer:SOME_ENV)%
%env(explode:dash:float:SOME_ENV)%
%env(explode:bar:SOME_ENV)% // cast to string by default.


Теперь вы можете из такой строки 435423,923592,8235823, лежащей в env, получить массив чисел или строк.
#laravelshit

В тему разговора о том, почему фасады плохие, можно вспомнить ишьюс на гитхабе, в котором разработчики жалуются на то, что фасады превращают любой сервис в синглтон, потому что кэшируют их в текущем рантайме. Можно, конечно, обойти этот баг следующим образом, но все это говорит не в пользу фасадов. Главное не вздумайте использовать фасады в долгоживущих приложениях.

https://github.com/laravel/ideas/issues/1088
Хотите стать IT-специалистом крупной компании? Тогда обучающий курс «Профессия Go-разработчик» для вас!

За год обучения вы:
- получите базовые знания программирования;
- научитесь разрабатывать и тестировать приложения на Golang;
- освоите принципы работы с алгоритмами поиска и сортировки;
- научитесь взаимодействовать с файловой системой.


Переходите по ссылке и регистрируйтесь. Первые 3 месяца обучения бесплатно!▶️ https://clc.am/kABWww.
#symfony #advanced

Пакет для Symfony, который необходимо использовать в долгоживущих процессах: например, очередях и консольных командах. Пакет помогает следить за используемой памятью и вовремя очищать ее, например, почистив EntityManager.

https://github.com/LongRunning/LongRunning
Forwarded from PHP Digest
В PHP 8.1 будут readonly свойства

https://wiki.php.net/rfc/readonly_properties_v2

Такие свойства нельзя изменить после инициализации.

Инициализировать можно только в том же скоупе, то есть в объявлении или в методе класса (можно обойти через Reflection или старый трюк с Closure::bind).

Свойства с флагом readonly должны быть типизированные, но можно использовать тип mixed.

Если readonly свойство инициализировано объектом, то иммутабельным он не становится. То есть его внутреннее состояние все еще можно изменить.
#advanced #laravel

Полезный PR от Тейлора, в котором улучшена обработка ошибок при тестировании эндпоинтов. Например, раньше при сравнении статус-кодов вы могли получить ошибку приложения, но не понять, что именно произошло, так как вы получали не полный стак-трейс.

https://github.com/laravel/framework/pull/38025
#advanced #jwt

Статья с громким названием "Почему JWT сосет?". Когда вместо jwt токенов нужно использовать обычную сессию и для чего на самом деле можно использовать jwt токены.

https://scotch.io/bar-talk/why-jwts-suck-as-session-tokens
#advanced #architecture

Большая статья, в которой рассматриваются примеры технологий и подходов при построении высоконагруженных приложений:

1. Балансировщики нагрузки;
2. SQL или NoSQL базы данных;
3. Шардинг;
4. Репликация;
5. Кэширование;
6. CDN;
7. Long-polling vs Websockets vs SSE.

https://proglib.io/w/4bc624df