Получи случайную криптовалюту за регистрацию!

Beer::PHP 🍺

Логотип телеграм канала @beerphp — Beer::PHP 🍺 B
Логотип телеграм канала @beerphp — Beer::PHP 🍺
Адрес канала: @beerphp
Категории: Технологии , Образование
Язык: Русский
Количество подписчиков: 3.05K
Описание канала:

Здесь публикуются короткие заметки о PHP, Linux, Unit Testing, DB, OOP, etc., выдержки из статей, книг, видео, курсов и других материалов.
Теперь тебе больше не нужно перерывать тонны информации ;)
@genkovich — написать автору канала.

Рейтинги и Отзывы

3.33

3 отзыва

Оценить канал beerphp и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

1

2 звезд

1

1 звезд

0


Последние сообщения 3

2021-10-06 19:14:47 ​​Приглашаем тебя на бесплатную программу обучения JS+PHP Full Stack!

Ты — студент или начинающий программист?
Интересуешься разработкой на РНР и VueJS?

Записывайся на бесплатную программу обучения от NIX!

За три месяца вместе с опытными экспертами NIX ты на практике освоишь основные инструменты JS+PHP-разработчика. Полученные знания и навыки помогут тебе пройти собеседование на позицию Junior РНР Developer в нашу команду.

Что мы ожидаем от тебя:
ты понимаешь, как устроен интернет и как происходит обмен информацией в сети;
знаешь основные принципы ООП;
разбираешься в работе любой СУБД, в исключениях и интерфейсах;
владеешь базовыми знаниями SQL и принципами нормализации БД;
понимаешь, как работает PHP интерпретатор, как строить циклы и условия;
знаком с разметкой HTML (основные теги, структура страницы);
понимаешь работу любой системы контроля версий.

3 месяца, 30 занятий в группе с ментором, трижды в неделю с возможностью подключаться в Zoom.

Узнай больше о программе обучения JS+PHP Full Stack — переходи по ссылке в описании нашего профиля!
1.9K viewsКирилл Сулимовский, 16:14
Открыть/Комментировать
2021-09-30 10:30:00 Decorator pattern

Не подумайте, меня не покусал Егор Бугаенко (для тех кто в теме, кто нет — погуглите), мои взгляды не настолько радикальны, однако я действительно считаю, что этому паттерну уделяют мало внимания. Потому решил познакомить с ним тех, кто не знаком и освежить в памяти для тех, кто уже давно им пользуется.

Декоратор — (wiki) структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту.

Если простым языком, то суть данного паттерна заключается в "оборачивании" существующего объекта новым функционалом, при этом оригинальный интерфейс объекта остается неизменным. В данном примере WrapperObject и есть наш декоратор.

В чем преимущества?

1. Его не получится просто так создать без существования базового класса.
2. Так как базовый класс и класс обертка имплементируют один интерфейс — то они взаимозаменяемы.
3. Мы расширяем поведение без изменения исходного кода.

Стоп, да это же прям Open-Closed Principle! И да, это отличная альтернатива наследованию. Также вы можете использовать несколько разных обёрток одновременно.

Да, клиентский код выглядит не круто, да и искать все места где вызывается базовый класс, чтобы прицепить обёртку бывает проблематично (особенно в долгоживущих проектах). Однако в фреймворках этот вопрос легко решается. Например в Symfony достаточно добавить всего несколько строк:

Представим, что у нас есть какой-то Mailer, который мы описали в services.yaml и теперь мы хотим логировать отправку всей почты. Для этого у контейнера есть директива decorates. Подобная запись подменит основной mailer на mailer_logger и наши письма начнут начнут логироваться. Для ссылки на исходный класс нужно использовать decorating_service_id + .inner (или просто '@.inner' начиная с Symfony 5.1).

Но что если мы хотим не только логировать, но и отправлять наши письма через очередь? Нет проблем, мы можем добавить еще одну запись. Но как задать порядок в котором будут вызваны декораторы? Для этого существует директива decoration_priority (по умолчанию 0). Соответственно чем выше приоритет — тем раньше применится декоратор (всё логично). Например такой код сначала залогирует (1), а потом уже отправит в очередь (2) наше сообщение:

$this->services['mailer'] = new LoggerDecorator(new QueueDecorator(new Mailler()));

#php #oop #patterns #middle
2.8K viewsКирилл Сулимовский, 07:30
Открыть/Комментировать
2021-09-28 17:00:18
Code review sessions

Еще раз привет, для всех, кто пропустил предыдущую новость

Один из наших подписчиков на чистом энтузиазме и морально волевых продвигает идею взаимного ревью для ребят, которые занимаются фрилансом или в целом не имеют команды.

Уже прошло несколько полноценных ревью сессий, в которых приняли участие десятки разработчиков.

Так что залетай и подписывайся eсли тебе не хватает ревью или же сам хочешь поделиться своими знаниями с другими :) Также поделись своим мнением или советом, чтобы ребята смогли сделать продукт еще круче!
1.3K viewsКирилл Сулимовский, 14:00
Открыть/Комментировать
2021-09-24 18:30:01 Спешите присоединиться к бесплатному онлайн-интенсиву по основам программирования на языке PHP, который пройдёт 27–29 сентября в 19:00 по московскому времени. Познакомитесь с одним из самых востребованных языков в веб-разработке и напишете своё первое приложение — игру «Поле чудес».

Интенсив подойдёт и новичкам, и начинающим разработчикам.

Подробная программа: https://clc.to/URXSJg

Чтобы интенсив прошёл максимально эффективно, установите PHP 8 и среду разработки PhpStorm. После регистрации мы пришлём вам ссылку для скачивания.

Спикер интенсива — веб-разработчик с девятилетним опытом Михаил Волков. Он руководит направлением «Обучение» в QSOFT, создал образовательный проект BitrixCasts, ведёт блог о программировании на PHP и JavaScript.

Все участники получат электронную книгу Кей Петерсон и Дэвида Колба «Век живи — век учись» издательства МИФ. А те, кто сдаст домашнее задание, — сертификаты на 5 000 рублей на любой курс Skillbox.

А еще дарим вам чек-лист «Как создать игру «Поле-чудес» на PHP», он поможет по шагам воссоздать сайт, который вы сделаете на интенсиве!

Подключайтесь к прямым эфирам!
958 viewsКирилл Сулимовский, 15:30
Открыть/Комментировать
2021-09-24 09:00:47 Локальная разработка пакетов (composer + phpstorm)

Буквально пару дней назад мой коллега спросил "а как ты работаешь с мультирепозиториями?", "О чём ты?" — спросил я, "Ну вот тебе нужно сделать sdk и сразу протестить внутри приложения, что ты делаешь?". И вот уже через несколько часов я действительно разбирался с этой проблемой, решением которой захотел поделиться.

Представим, что у вас есть проект и вы решили сделать отдельный пакет, который будет решать какую-то задачу внутри проекта. Например собственное SDK для внешнего API, которое хотите внедрить и тестить прямо в своём проекте. С чего начать?

0. создаете папку
1. в ней composer init
2. создать структуру папок и прописать psr-4 (вот пост с подробностями)
3. не забудьте git init :) точно пригодится

Дальше начинается самое интересное. Как же подключить наш локальный пакет к существующему vendor?

Оказывается всё достаточно просто. Нужно добавить в composer.json директорию repositories, добавить запись с типом path, а урл — относительный путь в директорию с пакетом:

"repositories": [
{
"type": "path",
"url": "../my-package"
}
],
"minimum-stability": "dev"

и не забыть понизить minimum-stability до dev. Выглядит вот так.

Дальше делаем composer require package/name и вуаля! Теперь мы можем смело править файлы пакета, без дополнительных коммитов, пуша в удаленный репозиторий и прочих прелестей. Всё потому, что фактически композер сделал симлинку и подтягивает изменённые файлы напрямую.

Ну, а для того чтобы во время разработки не прыгать между окнами, достаточно добавить в PHPStorm -> Settings -> Version Control тот самый локальный репозиторий, затем открыть папку проекта и выбрать attach. После этого находясь в одном окне вы можете спокойно править файлы и проекта и пакета, при этом каждый будет, пуллиться, фетчится и даже коммититься в свой гит репозиторий :)

#middle #phpstorm #packages
1.6K viewsКирилл Сулимовский, 06:00
Открыть/Комментировать
2021-09-20 13:00:11
ЭТОТ ЯЗЫК ПРОГРАММИРОВАНИЯ МОЖНО ОСВОИТЬ ЗА 1 МЕСЯЦ

Только для PHP необходим минимальный набор знаний. Это язык программирования с САМЫМ низким порогом входа.

А на нём работают YouTube, Facebook, Wikipedia...

Laravel – это идеальная экосистема для тех, кто хочет устроиться на работу максимально быстро. Этому учат на канале @web_craft

Опытные разработчики создали этот канал, чтобы люди учились работе с Laravel и за пару месяцев находили работу в IT-гигантах.

Открывай, изучай — t.me/web_craft
1.6K viewsКирилл Сулимовский, 10:00
Открыть/Комментировать
2021-09-17 12:00:51
Проложи свой маршрут по Go вместе с экспертами Ozon!

Route 256
Highway to ecom

Бесплатно
Оффер лучшим выпускникам
Без собеседования на входе
Два месяца
Старт 25 сентября

Ты сможешь работать с асинхронным кодом, использовать Prometheus и Grafana для мониторинга и многое другое.

Будет предварительный отбор. Подай заявку до 25 сентября включительно и перезапусти карьеру в IT: https://ozon.ru/t/U3c8j
1.4K viewsКирилл Сулимовский, 09:00
Открыть/Комментировать
2021-09-17 09:00:12 Битовые операции (часть 2)

В прошлой части мы рассмотрели побитовые сдвиги влево и вправо, сегодня рассмотрим остальные 4 операции — AND & , OR | , XOR ^, NOT ~.

Для примера рассмотрим простую систему разграничения прав доступа к сайту.

У нас будут доступны следующие права доступа: Чтение, Создание, Редактирование, Удаление. То есть всего 4 значения, их можно представить в виде 4-х битного числа, в котором 1 — означает, что у пользователя есть данное право, а 0 — нет. Разберем код из предыдущей части:

define('U_READ', 1 << 0); // 0001
define('U_CREATE', 1 << 1); // 0010
define('U_EDIT', 1 << 2); // 0100
define('U_DELETE', 1 << 3); // 1000
define('U_ALL', U_READ | U_CREATE | U_EDIT | U_DELETE); // 1111

В первых 4 строках мы задали константы с помощью сдвига влево. А в пятой строке использовали оператор OR |. Он выполняет операцию над каждым битом своих операндов. Бит результата устанавливается, если соответствующий бит установлен хотя бы в одном операнде. Например:

$x = 3; // 0011
$y = 5; // 0101
echo $x | $y; // 0111 (7)

Таким образом мы можем задать любые разрешения для пользователя:

$userPermission = U_READ; // только право чтения
$userPermission = U_READ | U_CREATE; // можно читать и создавать
$userPermission = U_ALL ^ U_DELETE; // все права кроме удаления
$userPermission = U_ALL & ~ U_DELETE; // тоже все права кроме удаления

В данном примере мы видим XOR ^ (исключающее или). Бит устанавливается, если соответствующий бит установлен в одном (но не в обоих) из двух операндов.

$x = 3; // 0011
$y = 5; // 0101
echo $x ^ $y; // 0110 (6)

В нашем случае:

U_ALL 1111
U_DELETE 1000
RESULT 0111

В следующей строке сразу 2 оператора AND & и NOT ~. Оператор & выполняет операцию логическое И над каждым битом своих операндов. Бит результата устанавливается, если соответствующий бит установлен в обоих операндах:

$x = 3; // 0011
$y = 5; // 0101
echo $x & $y; // 0001 (1)

Оператор NOT ~ представляет собой унарный оператор, указываемый перед своим единственным операндом. Он выполняет инверсию всех битов операнда. Из-за способа представления целых со знаком в PHP применение оператора ~ к значению эквивалентно изменению его знака и вычитанию 1.

$y = 5; // 0101
echo ~$y; // 1010 (-6)

Таким образом в нашем примере сначала сработает оператор NOT. U_DELETE из 1000 станет 0111, а затем вызовется оператор &

U_ALL 1111
~ U_DELETE 0111
RESULT 0111

Разница между этими вариантами в том, что в первом случае просто переключается бит, если был 1, то станет 0, и наоборот. Второй же вариант делает бит равным 0, независимо от его текущего значения.

Если мы хотим убрать какое-нибудь право доступа, то пишем так:

$userPermission &= ~ U_DELETE; // запретить удаление

Для проверки битов (в нашем случае прав доступа) можно использовать следующие конструкции.

if ($userPermission & U_READ) // есть ли право чтения?
if ($userPermission & (U_READ | U_DELETE)) // есть ли право чтения и/или удаления

Еще один пример:

// Вместо
if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR) {}
// Или
if (in_array($error['type'], [E_ERROR, E_PARSE, E_COMPILE_ERROR])) {}

// Можно использовать
if ($error['type'] & (E_ERROR | E_PARSE | E_COMPILE_ERROR)) {}

Несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, достаточно часто для проверки кодов ошибок используются обычные операторы сравнения. Но теперь вы знаете, что можно сравнивать и побитово ;)

#php #junior #source
1.4K viewsКирилл Сулимовский, edited  06:00
Открыть/Комментировать
2021-09-16 15:00:21
Пройдите онлайн-курс от Skillbox и станьте востребованным PHP-разработчиком!

PHP входит в десятку самых популярных языков программирования по индексу TIOBE. На этом серверном языке написано большинство CMS, в том числе и WordPress, на котором работает 65% всех сайтов в мире. Чтобы поддерживать работу старых проектов и писать веб-приложения с нуля, компании нанимают PHP-разработчиков.

Вы с нуля научитесь программировать сайты и веб-приложения на PHP, освоите фреймворк Laravel, напишете облачное хранилище и поработаете над интернет-магазином в команде. Сможете устроиться на позицию Junior-разработчика.

Прямо сейчас более 2 800 компаний ищут PHP-разработчиков, а средняя зарплата, по данным HeadHunter, составляет 90 000 рублей!

Расходы за первые 3 месяца обучения берёт на себя Skillbox.

В конце обучения опытные HR-специалисты подберут лучшие вакансии, подготовят к собеседованию и помогут получить работу.

Переходите по ссылке: https://clc.to/znpEQg и узнайте больше о программе обучения.
1.2K viewsКирилл Сулимовский, 12:00
Открыть/Комментировать
2021-09-15 15:00:46
Хочешь принять участие в CodeReview?

Один из подписчиков Beer::PHP недавно рассказал мне о своей идее проведения взаимного ревью для ребят, которые занимаются фрилансом или в целом не имеют команды.

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

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

Так что залетай и подписывайся eсли тебе не хватает ревью или же сам хочешь поделиться своими знаниями с другими :)
1.3K viewsКирилл Сулимовский, 12:00
Открыть/Комментировать