PHP Profi

ПроектированиеСобытийные микросервисы с использованием RabbitMQ

Использование правильных шаблонов/паттернов для общения между микросервисами может помочь масштабировать ваше приложение и решить наиболее распространенные системные проблемы. Мы начали с прямых HTTP-вызовов для всех взаимодействий, но решили перейти к событийной системе. Эта система изменила наше мышление о взаимодействии между службами, навязала масштабируемые паттерны и увеличила отказоустойчивость.

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

2017-04-20 alek13

ПроектированиеDDD в PHP: Value Object или Объект-Значение

Определение Мартина Фаулера:

Небольшой простой объект, как деньги или диапазон дат, равенство которых не основано на идентичности

Объект-Значение (Value Object) — это объект, который представляет собой понятие из предметной области. В DDD (Domain Driven Development — разработка на основе предметной области, или предметно-ориентированное программирование) важно то, что Value Object поддерживает и обогащает Единый Язык вашей Предметной Области. Это не только примитивы, которые представляют собой некоторые значения, — они являются полноправными гражданами Предметной Области, которые формируют поведение вашего приложения.

Хорошие примеры Value Object-ов, упомянутые у Мартина, — деньги и время. При создании ГИС-приложений вы можете прийти к такому Объекту-Значению, как  Location($lat, $long), который будет инкапсулировать широту/долготу и подобное. Вопрос, который вы, вероятно, захотите задать — почему это лучше, чем просто передать два float`а в массиве и называть это $location?

Преимущества использования Value Objects

2017-04-16 alek13

Тонкости языкаСоздание строго типизированных массивов и коллекций с использованием value object

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

Что-то я редко встречаю, чтобы это было совмещено с указанием типа, в частности, для создания типизированных массивов.

Например, мы можем создать класс Movie с методом для задания массива дат выхода, который принимает только DateTimeImmutable объекты:

class Movie {
  private $airdates = [];

  public function setAirDates(\DateTimeImmutable ...$airdates) {
    $this->airdates = $airdates;
  }

  public function getAirDates() {
    return $this->airdates;
  }
}
2017-04-13 alek13

ПакетыМногопоточное программирование в PHP с помощью Pthreads

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

В этой статье мы взглянем на то, как многопоточность может быть достигнута в PHP с помощью расширения pthreads. Для этого потребуется установленная ZTS (Zend Thread Safety) версия PHP 7.x, вместе с установленным расширением pthreads v3. (На момент написания статьи, в PHP 7.1 пользователям нужно будет установить из ветки master в репозитории pthreads  – см. подробнее как установить (en) стороннее расширение.)

2017-04-04 alek13

Тонкости языкаТипы данных в PHP и MySQL

MySQL   PHP

С тех пор как был выпущен PHP 7.0, большое внимание уделяется скалярным типам. Сохранять типы данных внутри вашего приложения теперь довольно просто. Но когда речь идёт о внешних системах, таких как база данных, то всё не так всё гладко, как казалось изначально.

2017-03-28 alek13

ИнструментыComposer: Шпаргалка команд

Коротко и ясно обо всех командах Composer.

2017-01-26 alek13

FrontendFont Awesome - если нужны иконки

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

Типичный пример — иконка домика как ссылка ведущая на главную страницу.

Исторически дизайнеры рисовали их векторно и сохраняли в формате .ico какого-то стандартного размера.

Этого было достаточно, когда интернетом пользовались только на стационарных компьютерах с мониторами,

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

2016-10-25 dima

ИнструментыСоздание Rest-API с Symfony 3.1

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

Мы уверены, что Symfony один из самых лучших фреймворков для создания rest API и в этой статье мы рассмотрим создание rest API с Symfony 3.1

Мы пройдемся по следующим пунктам:

  • Что такое Rest API
  • Доступные бандлы для Rest API
  • Регистрация бандлов
  • Конфигурация
  • Создание сущности пользователя
  • GET, POST, PUT, DELETE
2016-10-03 irul

ИнструментыАвторизация из коробки в Laravel 5.2

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

Раньше всё это присутствовало прямо из коробки (примечания переводчика: указанные ниже файлы-шаблоны присутствовали в скелетоне приложения, который разворачивался при установке, — не в самом фреймворке). К моему великому огорчению, это исчезло в последнее время, но теперь эти заготовки доступны через Artisan-команду make:auth (примечания переводчика: и это правильно):

Command line output of artisan make:auth

Какие возможности это нам предоставляет? Давайте копнём глубже.

2016-09-07 alek13

ИнструментыОграничение скорости API в Laravel 5.2

В последнее время всё больше и больше моих работ на Laravel связано с созданием API. У меня есть свой класс для ограничения скорости, который я использовал, но у меня было ощущение, что есть способ сделать это чище. Неудивительно, что, когда Тейлор решил написать middlewere ограничения скорости для Laravel, он сделал это чище и лучше, чем у меня.

2016-08-30 alek13

НовостиВышел релиз Laravel 5.3

Команда разработчиков фреймворка с гордостью анонсировала релиз Laravel 5.3, и теперь он в общем доступе. Новые фичи версии 5.3 направлены на повышение скорости разработки благодаря добавлению в коробку дополнительных улучшений для распространённых задач.

Этот релиз будет получать общие обновления в течение шести месяцев, и обновления безопасности в течение одного года. Laravel 5.1 - последний релиз LTS, с двумя годами исправления багов и тремя годами исправления безопасности.

Вот краткий обзор новых основных моментов Laravel

2016-08-25 irul

ИнструментыНеявная привязка модели при роутинге в Laravel 5.2

Этот функционал нельзя назвать новым, и route model binding уже давно есть в Laravel, но в Laravel 5.2 он стал ещё проще.

2016-08-22 alek13

ИнструментыВалидация массива формы в Laravel 5.2

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

Краткое введение в массивы HTML-формы

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

2016-04-27 alek13

ИнструментыPHPUnit для начинающих. Часть 3: Тестовые «двойники»

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

Когда использовать двойников в тестах

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

2016-04-21 alek13

Базы данныхКэширование запросов с помощью PHP и MySQLnd

Несмотря на то что у MySQL есть встроенное кэширование запросов, оно всё равно имеет некоторые проблемы:

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

Мы можем решить эти проблемы, используя кэширование на уровне приложения, но как нам достичь простоты и прозрачности использования, не создавая себе новых проблем?

И вот тут на сцену выходит плагин mysqlnd_qc.

2016-04-18 alek13

Инструменты Запуск из командной строки «исторически сложившихся» (legacy) PHP приложений

Представьте, что у вас есть приложения, которые работают уже какое-то время, но есть несколько распространенных случаев, в которых вы решаете, что нужен CLI интерфейс:

  •  Вы запускаете различные cron задания, которые выполняют HTTP вызовы к некоторому API для запуска различных задач на вашем web-сайте (например, отправка почты и т. д.)
  •  У вас есть некоторые операции, которые вы хотите автоматизировать (с помощью chef или чего-то подобного), а через HTTP- запрос нельзя сделать это красиво
  •  Вы хотите добавить команды "супермега пользователя" (например, сброс пароля), которые могут быть выполнены из командной строки вместо "взлома" базы данных
  •  Добавьте сюда свою причину...

 
Так как же мы можем сделать это? особенно не переизобретая все заново?

2016-02-22 ddelay

RFCRFC: Перегрузка операторов

Буквально сразу после Нового года (02.01.2016) был предложен новый RFC. Это предложение о введении в PHP перегрузки операторов. RFC был предложен Patricio Tarantino и Sara Golemon и предлагается добавить эту возможность в версии 7.1.

Итак, что же такое перегрузка операторов, и как это будет выглядеть в PHP?

2016-01-20 alek13

ИнструментыMiddleware groups in Laravel 5.2

Когда вы пишете крупный проект на Laravel`е, то ваш файл маршрутизации (routes.php) как правило, становится довольно большим. В первую очередь я группирую роуты на логически отдельные секции. Например "admin", "auth", "public".  Обычно каждая из этих групп получает свой собственный набор http-посредников (middleware) — "admin", например, получает auth. Конечно, группа маршрутов для API может использовать другой auth посредник (middleware), а он — использовать специфические для API ограничения или что-то еще.

В Laravel 5.2 появились группы http-посредников (middleware groups), которые являются по сути сокращением (алиасом) для применения большей группы посредников, используя только её ключ.

2016-01-13 alek13

НовостиВышел PHP 7

Команда разработчиков PHP сообщает о выходе PHP 7.0.0. Этот релиз знаменует собой начало новой серии мажорных версий PHP 7.

PHP 7.0.0 поставляется с новой версией Zend Engine, многочисленными улучшениями и новым функционалом, такими как

2015-12-05 alek13

ПакетыУвеличение производительности памяти при помощи Generators и Nikic/Iter

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

Возьмём, например, такие новые инструменты, как генераторы. Сначала были массивы и мы получили возможность определять всякие свои собственные массивоподобные штуки вроде итераторов. Но начиная с PHP 5.5 у нас появилась возможность быстро создавать структуры, похожие на итераторы, которые называются генераторами.

2015-10-29 irul