Обновить
36.27

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга
Уровень сложности

Браузерные Push-уведомления на Javascript и PHP

Время на прочтение5 мин
Количество просмотров22K

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

В данной статье не будут "размусолены" принципы работы и тонкости Push уведомлений, только код

Читать далее

Кто, где, когда: система компонентов для разделения зон ответственности команды

Время на прочтение7 мин
Количество просмотров6.3K

Меня зовут Евгений Тупиков, я ведущий PHP-разработчик в Badoo и Bumble. У нас в команде более 200 бэкенд-разработчиков, которые работают над сотнями модулей и отдельных сервисов в наших приложениях. Но поначалу всё было не так масштабно. В 2006 году это был один проект, над которым работала небольшая команда. Каждый разработчик хорошо понимал, как всё устроено: легко ориентировался в коде, знал, какие есть сервисы и как они взаимодействуют между собой. Однако по мере роста проекта всё больше времени занимал поиск «хранителей знаний» — тех, кто отвечает за ту или иную функциональность и к кому можно обратиться с вопросом или предложением. 

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

Читать далее

Ничего лишнего — только хардкор, только технологии

Время на прочтение8 мин
Количество просмотров4.3K

Пообщаться на важные именно для нас темы не только между собой, но и с представителями лучших топовых компаний и проектов в мире PHP — одна из самых главных активностей на конференции. В онлайне это сложно реализовать. Именно поэтому  мы  собираем всех вас вместе 28 июня. Из-за ковидных переносов конференции часть программы  PHP Russia 2021 поменялась. У кого-то из докладчиков изменились планы, и  мы нашли равноценную замену, пришли новые спикеры с неожиданно крутыми темами. В итоге примерно половина докладов были заменены.

Глобальное отличие от прошлой конференции — гибридный формат: она пройдёт одновременно офлайн и онлайн. Онтико сейчас проводит все конференции. В офлайне будет всё, как обычно: четыре зала, общение всех со всеми, обед и бесконечный кофе-брейк, небольшой фуршет с пивом и соками, афтепати и активности на стендах партнеров. Стенды, кстати, будут прикольные. Все партнеры используют PHP, и с ними будет интересно. А афтепати собирают ребята из московского Beer PHP. 

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

Читать далее

Зачем нужен static при объявлении анонимных функций?

Время на прочтение2 мин
Количество просмотров22K

Буквально на днях пришел вопрос от одного из подписчиков касательно одного из постов моего telegram канала. Его смутил вот такой кусок кода:

usort($firstArray, static function($first, $second) { return $first <=> $second;
});

Вопрос звучал так:

"Зачем делать callback’и в функции сортировки (usort), статическими?"

И я подумал, что это действительно хороший вопрос, на который стоит обратить внимание.

Читать далее

Magento 2 UI Components. Часть 2: конфигурация

Время на прочтение13 мин
Количество просмотров6.5K

Привет! Меня зовут Павел и я Magento 2 бэкенд-разработчик. В прошлой части саги о Magento 2 UI Components мы получили общие сведения о UI-компонентах, их разнообразии, строении и технологиях, лежащих в основе. Сегодня подробно коснемся их конфигурации: значения по умолчанию, XML-конфигурации, выражения в значениях конфигурации, замена шаблонов и JS-компонентов и пр. Погнали!

Читать далее

Телеграмм-бот для анализа опционов

Время на прочтение9 мин
Количество просмотров8.9K

Телеграмм-бот для графического анализа опционов и фьючерсов с расчетом гарантийного обеспечения как меры риска.

Читать далее

Уходим в кэш в высоконагруженных системах

Время на прочтение15 мин
Количество просмотров12K

Одна из вечных тем — правильная работа с кэшем. Звучит это просто, но на деле в ней очень много подводных камней и особенностей. Ну а когда приходит нагрузка, все становится еще интересней. В кэшировании нет «серебряной пули», а есть набор отработанных техник. И остается лишь подобрать их комбинацию для вашей задачи, используя достоинства и нивелируя недостатки.

На конференции PHP Russia 2021 Павел Паршиков, backend engineer в Авито, представит доклад «Уходим в кэш в высоконагруженных системах». А в этом  интервью мы поговорили о том, хорош ли PHP для растущих в плане нагрузки проектов, и какие его инструменты лучше применять.

Читать далее

Как в PHP улучшить читаемость регулярных выражений

Время на прочтение11 мин
Количество просмотров8.3K

Регулярные выражения — очень мощный инструмент, однако согласно общепринятому мнению, после того как они написаны, их очень трудно понять, поэтому их поддержка — не самое приятное занятие. Здесь собраны советы, которые помогут сделать из более читаемыми.

PHP использует диалект регулярных выражений PCRE — до версии PHP 7.3, и PCRE2 — в более новых версиях. Поэтому в PHP можно использовать различные продвинутые приемы, помогающие писать читаемые, самодокументируемые и поддерживаемые регулярные выражения. При этом не надо также забывать и о наличии в PHP функций фильтрации переменных, а также семейства функций ctype*, позволяющих валидировать такие распространенные значения как url-ссылки, адреса электронной почты и строки из букв и цифр — вообще без использований регулярный выражений. Во многих IDE есть подсветка регулярных выражений, помогающая их читать, а иногда даже и проверка выражений, с подсказками по их улучшению.

Читать далее

Модульный PHP монолит: рецепт приготовления

Время на прочтение10 мин
Количество просмотров24K

Статья написана по мотивам моего доклада на митапе. В нем я рассказываю историю того, как мы взяли и не распилили монолит на микросервисы, и что сделали вместо этого.

На тот момент наша команда работала над приложением, начало которому было положено еще в 2009 году не искушенными в архитектуре студентами. К 2018 это уже был типичный big ball of mud (большой ком грязи), или, этакий «монолит-копролит», как выразился один наш коллега. Думаю, многим знакомо.

Читать далее

PHP Дайджест № 204 (17 – 31 мая 2021)

Время на прочтение4 мин
Количество просмотров11K
Фото: Christian Münch.

В эти две недели core команда PHP активно обсуждала предложение по Partial function Application и в качестве альтернативы Никита Попов предложил более простой синтаксис для получения ссылки на любые функции. Также в уже принятые в PHP 8.1 енумы предлагается добавить статические свойства.

Symfony 6 будет требовать PHP 8.0, а вышедшая Doctrine 2.9 поддерживает указание метаданных в атрибутах вместо PHPDoc.

Еще в выпуске классная статья про регекспы и инструкция по использованию Deployer, а также другие полезные статьи, пачка инструментов, немного видео и подкастов.

Приятного чтения!
Читать дальше →

Чистим пхпшный код с помощью DTO

Время на прочтение4 мин
Количество просмотров41K

При написании нового метода или сервиса мы стараемся его максимально абстрагировать от внешних зависимостей, чтобы новый функционал реализовывал только заложенную ему логику. Об этом, собственно, нам и говорит один из принципов SOLID - Принцип единственной ответственности (single responsibility principle).

Я постоянно встречаю код, где если у метода больше двух входных аргументов, добавляется условный (array $args), что влечет за собой реализацию проверки наличия ключа, либо она отсутствует и тогда увеличивается вероятность того, что метод может закрашиться в рантайме.

Возможно, такой подход в PHP сложился исторически, из-за отсутствия строгой типизации и такого себе ООП. Ведь как по мне, то только с 7 версии можно было более-менее реализовать типизацию+ООП, используя strict_types и type hinting.

Читать далее

Наследование шаблонов в ванильном PHP за 35 строк кода?

Время на прочтение4 мин
Количество просмотров5.4K

В WordPress шаблоны нативные, что хорошо, - не надо учить дополнительный язык. Но очень хочется наследовать шаблоны как в Twig, а PHP из коробки так не умеет. Вдохновляться было решено библиотекой phpti, в которой нашлось несколько обидных моментов, которые очень захотелось поправить.

Читать далее

Принцип подстановки Барбары Лисков (предусловия и постусловия)

Время на прочтение4 мин
Количество просмотров21K

​Почему у многих возникают проблемы с этим принципом? Если ли более простое объяснение?

​️В данной статье мы НЕ будем рассматривать общие примеры данного принципа, о которых уже есть много материалов (пример с квадратом и прямоугольником или управления термостатами). Здесь мы немного подробнее остановимся на таких понятиях как «Предусловия», «Постусловия», рассмотрим что такое ковариантность, контравариантность и инвариантность, а также что такое «исторические ограничения» или «правило истории».

Интересно...

Ближайшие события

Мутационное тестирование: как поможет и чем лучше воспользоваться

Время на прочтение6 мин
Количество просмотров4.3K

Насколько вы уверены в своих тестах? Покрывают ли они все ветки выполнения ваших функций? Можем ли мы доверять Code Coverage? Ответы на эти вопросы дает мутационное тестирование. Для того чтобы пролить свет на самые темные его уголки, мы поговорили с PHP девелопером Itransition Максом Рафалко.

Макс — разработчик фреймворка для мутационного тестирования в PHP, который называется Infection. А на конференции PHP Russia 2021 он будет выступать с докладом, который познакомит слушателей с методологией мутационного тестирования.

Читать далее

Велосипед длиной в полжизни

Время на прочтение5 мин
Количество просмотров7.7K

Да, именно так: я начинал писать основу PHP движка в 2001-ом году. 

Тогда всё было проще: каталог inc/, в нём header.php, footer.php, common.php.

Но это было скучно и неинтересно, надо было ещё больше фишек, которые я бы мог предложить заказчикам. Так появился раздел admin/. Но примерно в тоже время  появился PHPNuke, это была бомба! Такой уровень кастомизации! Я понял, что ничего подобного я предложить не смогу, но и по требованиям мой движок был куда как проще, хотя позволял организовать каталог товаров, список статей, галерею. Несколько лет я дальше двигался по основной своей работе: администрирование Linux-серверов. 

Читать далее

Prototype Design Pattern в Golang

Время на прочтение5 мин
Количество просмотров5.2K

Привет друзья! С вами Алекс и я продолжаю серию статей, посвящённых применению шаблонов проектирования в языке Golang.

Интересно получать обратную связь от вас, понимать на сколько применима данная область знаний в мире языка Golang. Ранее уже рассмотрели шаблоны: Simple Factory, Singleton и Strategy. Сегодня хочу рассмотреть еще один шаблон проектирования - Prototype.

Читать далее

Книга «Создаем динамические веб-сайты на PHP. 4-е межд. изд.»

Время на прочтение10 мин
Количество просмотров4.1K
image Привет, Хаброжители! Сложно найти что-то толковое про PHP? Проверенная временем, обновленная в четвертом издании, эта книга помогает начинающим разработчикам научиться всему, что необходимо для создания качественных веб-приложений.

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

Вы получите множество рекомендаций по стилю программирования и процессу разработки ПО от Кевина Татро и Питера Макинтайра. Этот материал, изложенный в доступной и компактной форме, поможет вам овладеть мастерством программирования на PHP. • Общие сведения о том, какой результат можно получить, используя PHP. • Основы языка, включая типы данных, переменные, операторы, управляющие команды. • Функции, строки, массивы и объекты. • Решение распространенных задач разработки: обработка форм, проверка данных, отслеживание сеансовых данных и cookie. • Работа с реляционными базами данных (MySQL) и базами данных NoSQL (например MongoDB). • Генерирование изображений, создание файлов PDF, парсинг файлов XML. • Безопасность скриптов, обработка ошибок, оптимизация быстродействия и другие нетривиальные темы.
Читать дальше →

Как команда it-animals в финале Цифрового Прорыва выиграла

Время на прочтение7 мин
Количество просмотров1.6K

Данная статья написана в соавторстве с тимлидом @Restlin

Выбор кейса и наше видение его решения

Изначально выбор пал на кейс МВД: Разработка автономного программного решения лингвистического анализа и преобразования в тексте лица повествования.

Формулировка кейса:

Учитывая специфику деятельности определенных служб МВД России, при подготовке документов требуется преобразование в тексте лица повествования от первого лица в третье с учетом рода. Например, фраза в исходном тексте «Я увидел, что Иванов пошёл ко мне» в итоговом тексте должна быть преобразована в «Он увидел, что Иванов пошёл к нему». Разработанное программное решение позволит в автоматическом режиме проводить процесс конвертации лица повествования, что позволит сотрудникам уделить больше времени на иные аспекты служебной деятельности. Кейс подготовлен Департаментом информационных технологий, связи и защиты информации МВД России. 

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

Планировалось, что мы создадим веб-сервис, который умеет автоматически  преобразовывать показания свидетеля из первого лица в третье.

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

1. локальное решение, работающее без доступа в сеть; 

2. интегрированные офисные пакеты посредством макросов.

Наша команда разделилась на 2 лагеря: половина настаивала на четком соблюдении требований кейсодержателя, в противном случае смене кейса, вторая настаивала на первичном варианте решения ( оффтоп: подобное решение выстрелило у других ребят и они выиграли).

Читать далее

CS Cart или через терни к черной дыре костылей и оптимизаций

Время на прочтение6 мин
Количество просмотров11K

Совсем недавно, я стал разработчиком модулей для CS Cart. Случилось это по воле случая: меня взяли на работу в Петербургскую сеть интернет магазинов, торгующих вейпами и всякими интересными штуками для удовлетворения потребностей физического характера страждущих пар и одиночек (кто не понял - еще не дорос ). Оба интернет магазина развернуты на двух витринах с разными доменами, но одной админкой и общей базой данных. Что же с ней не так? Думаю о CMS написано много, но я добавлю свою ложку дегтя в бочку с дегтем .

Читать далее

Модульные frond-end блоки — пишем свой пакет. Часть 2

Время на прочтение29 мин
Количество просмотров2.5K

В первой части я поделился своим взглядом на то, какими могут быть переиспользуемые front-end блоки, получил конструктивную критику, доработал пакет и теперь хотел бы поделиться с вами новой версией. Она позволит легко организовать использование модульных блоков для любого проекта с бекендом на php.

Для тех кто не знаком с первой частью я буду оставлять спойлеры из нее, которые введут в курс дела. Тем кому интересен конечный результат - демонстрационный пример и ссылки на репозитории в конце статьи.

Читать далее