Обновить
128K+

PHP *

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

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

Как правильно использовать mysqli

Время на прочтение10 мин
Охват и читатели44K

image


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


Кроме того, переводчик, также как и вы, считает, что PDO является более продвинутым API для работы с БД, чем mysqli. Но поскольку новички в подавляющем большинстве всё равно начинают с mysqli, то нужен хотя бы один нормальный материал по этому расширению. Не можешь противостоять — возглавь!


Не говоря уже о том, что в последнее время mysqli была сильно улучшена, и из совершенно неюзабельной превратилась в довольно сносную библиотеку, в которой из принципиальных отличий от PDO осталось разве что отсутствие именованных плейсхолдеров. Так что даже (особенно) если вы учили РНР 20 лет назад и всё знаете вдоль и поперёк, то всё равно сможете найти для себя что-то новое.

Читать дальше →

Использование WebAssetsManager Joomla 4 (Joomla 5) и добавление собственных пресетов с помощью плагина

Время на прочтение8 мин
Охват и читатели5.3K

В мире фронтенда многие ресурсы (ассеты) связаны между собой. В Joomla никогда не было простого способа указать эту связь, но Joomla 4 изменила эту ситуацию, введя концепцию Web Assets. Управление JavaScript и CSS в Joomla значительно упростилось, благодаря классу WebAssetManager. Есть замечательная статья Как правильно подключать JavaScript и CSS в Joomla 4, в которой подробно и с примерами кода рассказывается об этой концепции и её применении. Рекомендую ознакомиться с ней для более полного понимания сути этой статьи.

Однако, в процессе разработки собственных решений я столкнулся с проблемой. Решение её в данной заметке будет небольшим дополнением к вышеупомянутой статье.

Читать далее

Демо Symfony конвертер валют

Время на прочтение5 мин
Охват и читатели4.2K

Недавно довелось делать тестовое задание на Symfony - конвертер валют с прямой и кросс-конвертацией. Получилось весьма неплохо, поэтому хочу поделиться с сообществом примером простого консольного приложения по всем канонам Symfony: DI, autowiring, тегирование сервисов, гибкая конфигурация, вот это вот всё. Надеюсь, это будет полезно начинающим "симфонистам".

Код приложения https://github.com/vladimirmartsul/symfony-exchange-demo

Приложение считает "обмен валюты" по прямым курсам (например, USD -> EUR), а также через "промежуточные" валюты (например, BTC -> EUR). Также есть фейковые курсы для тестов.

Курсы берутся с сайтов ecb.europa.eu (основные мировые валюты по отношению к EUR) и coindesk.com (BTC к USD). Триангуляция основана на принципах отсюда http://www.dpxo.net/articles/fx_rate_triangulation_sql.html. Для хранения данных используется БД SQLite.

Читать далее

Генерация строго-типизированных коллекций в PHP

Время на прочтение3 мин
Охват и читатели4.2K

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

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

На днях появилась мысль, как решить эту задачу с помощью генерации кода: Предположим у нас есть папка с объектами в которой находится объект name\space\SomeObject. Полного имени класса этого объекта нам достаточно, чтобы создать для нее класс коллекции name\space\collections\SomeObjectCollection. Такая коллекция может гораздо в большей степени строго-типизированной. Отдельным плюсом сталоо бы отсутствие зависимости от сторонних пакетов: т.к. код получен генерацией, а не расширением шаблона. Единственная связь, которую потребует класс коллекции – связь с классом, экземпляры которого коллекция будет содержать.

Не найдя в интернете подходящего решения под свою задумку, решил написать его сам...

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 4 — Redis

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7K

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

Читать далее

PHP-Дайджест № 222/4 (26 апреля – 31 мая 2022)

Время на прочтение5 мин
Охват и читатели7.4K

Доброго дня! Представляю вашему вниманию очередной дайджест новостей из мира PHP.

В этом выпуске: новые версии PHP, новости RFC, новости популярных фреймворков, обзор интересных статей и многое другое.

Читать далее

Laravel Route Grouping: 6 Методов организации маршрутов

Время на прочтение7 мин
Охват и читатели22K

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

Laravel Routing - это функция, которую разработчики изучают с самого начала. Но по мере роста проектов становится все труднее управлять постоянно растущими файлами маршрутов, прокручивая их, чтобы найти нужное Route::get() объявление. К счастью, существуют методы, позволяющие сделать файлы маршрутов короче и читабельнее, группируя маршруты и их настройки по-разному. Давайте посмотрим.

Здесь мы не будем говорить только об общем простом Route::group()- это начальный уровень. Давайте погрузимся немного глубже.

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 3 — WebSocket

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.9K

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

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 2 — Масштабируемость и асинхронность

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.9K

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

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

Статья устарела - читайте актуальную статью про масштабирование и открытый мир

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 1 — Введение

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели16K

Привет, Хабр! Мой первый пост и я хочу поделиться с вами своей идеей создание сервиса предоставляющего разработчикам игр и студиям платформу для создания онлайн игр! Поехали!

Читать далее

PHP репетиторство

Время на прочтение9 мин
Охват и читатели4.3K

В комментариях к прошлым статьям мне посоветовали позаниматься репетиторством со студентами, тк возможно это положительно повлияет на мою психику. Поначалу  это казалось таким нереальным, что я не воспринял совет всерьез. Но однажды мне просто подвернулась “студентка”, крайне заинтересованная в позиции junior PHP backend developer, тк процессы верстки ее крайне утомляют. Уровень ее знаний: почти полное непонимание процессов инициализации и модификации в циклах, полное непонимание арреев, в плане алгоритмов - непреодолимые трудности с алгоритмами сложнее пузырьковой сортировки. Уровень ее ожиданий: позиция PHP junior после 3 месяцев регулярных тренировок.

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

Читать далее

Распределенные Workflow на PHP. Часть 2

Время на прочтение11 мин
Охват и читатели19K

В первой, теоретической, части статьи мы разобрали зачем нужны Workflow, где они применяются и какие способы их реализации существуют. Наша компания занимается разработкой энтерпрайз-софта — для нас это больная тема. Поэтому мы давно искали инструмент, который позволит легко вписывать новые шаги в любую схему, не ломая существующую бизнес-логику. Нашли и на его основе сделали свою новую разработку. Теперь давайте перейдём к более практической части и разберем, на что способен Temporal PHP SDK.

Меня зовут Антон Титов. Я более 15 лет занимаюсь коммерческой разработкой. Являюсь соавтором Spiral Framework, RoadRunner и Cycle ORM. Основной стек: PHP и Golang.

Читать далее

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

Снять с ручного тормоза: как новый сайт меняет бизнес-процесс

Время на прочтение7 мин
Охват и читатели1.9K

Привет! Я Алексей Василенко, руководитель направления PHP в AGIMA. Четыре года назад работал с компанией, которая занималась b2b-продажами. В основном продавали товары для активного отдыха. Палатки, лодки, моторы, спальные мешки — всё, что пригодится туристу в походе. Ребята позвали меня поработать над их сайтом. Он казался им неудобным и малоэффективным. Но в итоге оказалось, что неудобным и малоэффективным был весь бизнес-процесс в компании. За 3 года мы не просто переделали сайт. Мы полностью поменяли подход к работе, увеличили количество заказов в 2 раза, а эффективность бизнеса — в 3. И всё это силами IT-отдела. Текст о том, как технологические решения влияют на доходы и клиентский сервиc.

Читать далее

Ловим Енотисов при отладке на PHP: руководство для программистов

Время на прочтение5 мин
Охват и читатели4.8K

Если вы владелец сайта и думаете, что на нём нет ошибок, то вы ошибаетесь. Если вы программист и думаете, что некоторые ошибки можно не обрабатывать, то вы тоже ошибаетесь. В обоих случаях речь идёт о Енотисах (E_NOTICE). Далее вы узнаете, почему им нужно уделять внимание и как сделать удобный инструмент для хранения и обработки ошибок.

Читать далее

Асинхронность, конкурентность, параллельность, многопоточность — разбираемся «по понятиям» :)

Время на прочтение15 мин
Охват и читатели37K

Эта статья представляет собой краткий (шутка!) конспект одноименного (почти) вебинара, недавно проведенного автором.

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

Ну и немного раскрыть глаза на то, что, оказывается в PHP есть и асинхронность, и многопоточность, и в общем-то не нужно ждать мифической версии PHP 10, чтобы начать их использовать уже прямо сейчас!

Лонг-рид с кодом ждёт вас!

Уменьшение трафика за счёт сжатия изображений. На примере Laravel

Время на прочтение9 мин
Охват и читатели9.6K

Как уменьшить трафик к вашему сайту в 200 раз? Возможно ли это?

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

Пример реализации на Laravel, его плюсы, минусы и возможные пути развития.

Читать далее

Тестирование в 1C Bitrix

Время на прочтение6 мин
Охват и читатели16K

Говоря о разработке сайтов с использованием CMS 1C Bitrix вопрос покрытия тестами поднимается редко. Главная причина в том, что большинство проектов обходится штатным функционалом, который предоставляется системой - его сложно (да и, в общем-то, незачем) тестировать.

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

Это и является предпосылкой для внедрения в CMS механизма тестирования.

Читать далее

Надежный способ сокрытия ссылок сайта от поисковых роботов

Время на прочтение4 мин
Охват и читатели11K

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

Читать далее

Как мы перевели операторов на единую платформу и стали закрывать по 240 тысяч задач в месяц

Время на прочтение11 мин
Охват и читатели5.3K

Так масштабировался сервис с марта 2020. Каждый цвет — группа операторов.

В Skyeng есть несколько отделов, которые сопровождают учеников. Например, отделы, отвечающие за входящую телефонную линию и техподдержку в чате на сайте. Есть группа Awake, работающая с учениками, которые брали перерыв в обучении. Есть группа Quality Control — она проверяет кейсы качества: например, что-то случилось на уроке и ученик оставил жалобу.

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

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

О жизни с внешними сервисами


Для работы с обращениями мы использовали такие системы как Usedesk, Omnidesk и Google Sheets. Это накладывало ограничения:

  • Операторам и менеджерам приходилось вручную создавать задачи. Такая рутина забирала много времени. Ошибиться проще простого.
Читать дальше →