PHP Profi

ИнструментыЗапуск из командной строки «исторически сложившихся» (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 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

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

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

2015-07-24 ddelay

НовостиHHVM 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

Тонкости языкаSPL итераторы вопреки производительности

 

Итераторы SPL вопреки производительности

2015-04-27 irul

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

MySQL всегда был основной базой данных для работы с PHP, так сложилось исторически, практически с самого начала. Конечно, некоторые используют PostgreSQL, SQL Server, или Oracle, но для интернет-проектов MySQL обычно является предпочтительной реляционной БД.

Это было связано, в основном, с легкостью внедрения и применения MySQL. Libmysqlclient шел в комплекте с PHP до тех пор, пока эта библиотека не была повторно лицензирована под GPL. После чего она была удалена из-за невозможности распространения вместе с PHP.

Это сделало процесс сборки для PHP немного более сложным, потому что теперь Libmysqlclient должна была быть доступна на хостинге.

2015-04-21 solD1Er

ComposerComposer: Всё о .lock файле

Composer является стандартом де-факто для управления зависимостями в PHP. Он прост, эффективен и уже стал вездесущ.

Каждый знает, что при использовании Composer вы просто создаёте файл composer.json со списком зависимостей и их версий, а после запускаете composer install и всё готово.

Потом вы коммитите composer.json в ваш проект и каждый разработчик вашей команды может легко установить все небходимые зависимости запустив composer install.

Конечно мы знаем и про composer update, которая обновит установленные пакеты до последний версии (опираясь на указанные версии в composer.json).

Это действительно просто. Но как насчёт файла composer.lock, который генерируется в корне проекта? Зачем ? И что нам с ним делать ?

2015-04-03 alek13