PHP Profi

LaravelВалидация массива формы в Laravel 5.2

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

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

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

2016-04-27 alek13

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

Это третья часть серии "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

LaravelMiddleware 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Вышел 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

Тонкости языкаПочему не стоит злоупотреблять абстракцией

Некоторое время назад я начал работать над уже существующим проектом. Прежде чем погрузиться в него, я прочитал документацию. В самом начале файла contributing.md мне встретилось следующее высказывание: "Абстракция везде, где это возможно". Вскоре я заметил, что в этом проекте гораздо больше абстрактных классов, чем обычно. Зачастую это приводит к появлению кода, который невозможно изменять и обладающего лишними зависимостями.

2015-10-18 irul

ТестированиеPHPUnit для начинающих. Часть 2: Data Provider.

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

 

Когда нужно использовать data provider

Когда мы пишем какую-то функцию, мы хотим быть уверенными, что она правильно отрабатывает на наборе крайних случаев. То же самое относится и к тестам. Это означает, что нам нужно написать множество разных тестов для одной и той же функции, используя разные наборы входных данных. Представим, что мы хотим протестировать класс Calculator с различными данными. Без data provider-а мы должны были бы описать несколько тестов примерно вот так:

2015-10-12 alek13

Базы данныхВведение в интерфейс Мemcached для MySQL InnoDB

В предыдущих статьях серии:

Introduction to MySQL's Innodb Memcached Interface

В MySQL 5.6 появилось memcache-совместимое хранилище ключ-значение на базе движка Innodb.

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

С помощью mysqlnd_memcache, вы можете прозрачно направлять ваши запросы к такому memcache-совместимому интерфейсу.

2015-10-07 alek13

Тонкости языкаHHVM vs PHP 7: грядёт конкуренция

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

2015-09-30 irul

Тонкости языкаУскоряем запросы в БД с помощью PDO и итераторов

Когда вы просматриваете километры кода, у вас вполне может возникнуть вопрос: "Почему все сделано так, как сделано?" Лично я особенно замечаю вещи, которые могут и должны быть улучшены, когда дело касается тяжелых запросов в БД. 

2015-08-31 solD1Er

Новости PHPRemi о libmcrypt и php-mcrypt

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

2015-07-24 ddelay

Новости PHPHHVM 3.8.0

Мы рады сообщить, что HHVM 3.8.0, наконец, доступен. Как всегда, вы можете, попробовать один из готовых пакетов для Ubuntu и Debian или собрать из исходника. (На момент написания статьи, пакеты до сих пор были в разработке, поэтому, если пакет 3.8.0 недоступен для вашего дистрибутива, дождитесь!)

2015-07-16 Systra

ТестированиеPHPUnit для начинающих. Часть 1: Начните использование.

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

Типы тестов

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

Давайте разделим тесты на категории по уровню их специфичности. По данным Википедии. В целом существует 4 признанных уровня тестов:

  • Unit-тестирование (модульное): этот уровень тестирует наименьшую единицу функциональности.
2015-05-29 alek13

ComposerSatis: Создайте свой собственный репозиторий Composer

Все мы любим Composer. Он существенно изменил способ построения PHP приложений, основанных на небольших и повторно используемых компонентах, но это создает новые проблемы, особенно, когда у нас есть единая точка отказа. С помощью Satis, мы можем сделать процесс выкладки более устойчивым, добавив резервирование для всех потенциальных точек отказа (Packagist и GitHub). Давайте посмотрим, как это работает.

2015-05-27 Systra

Базы данныхПродвинутое разделение чтения и записи с помощью MySQLnd в PHP. Часть 2.

Продолжение статьи

Шардинг и секционирование

Запросы на запись очень трудно распределить на множество машин (например, мульти-мастер репликация) традиционными средствами MySQL (т.е. не используя MySQL Cluster). Поэтому зачастую используется секционирование или шардинг. Это позволит вам равномерно распределить запросы среди множества ведущих серверов, записывая разные данные на каждый из них.

2015-05-23 alek13

Базы данныхПродвинутое разделение чтения и записи с помощью MySQLnd в PHP. Часть 1.

От переводчика: нам показалось, что эту статью долго не только переводить, но и читать. Поэтому мы решили разбить её на две части.

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

Множественные конфигурации

Те, кто внимательно читал первую часть могли заметить, что в файле конфигурации mysqlnd_ms имеется ключ первого уровня (в дальнейшем примере "appname"), который содержит все наши настройки. Это позволяет задать несколько вариантов конфигураций в одном файле.

2015-05-23 alek13

ComposerМонолитные репозитории для PHP и Composer

Монолитные репозитории предоставляют множество преимуществ. Я создал прототип Fiddler - дополнение для Composer, добавляющее управление зависимостями для монолитных репозиториев в PHP.

2015-05-05 irul