PHP Profi

ПакетыУвеличение производительности памяти при помощи 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

ИнструментыSatis: Создайте свой собственный репозиторий 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

ПакетыМонолитные репозитории для 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

ИнструментыComposer: Всё о .lock файле

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

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

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

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

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

2015-04-03 alek13

НовостиВышел релиз xdebug 2.3

  22 февраля вышел релиз такого полезного инструмента разработки, как xDebug. Что же нового и интересного в этом релизе?

2015-03-23 irul

RFCНаконец одобрено явное определение скалярных типов для PHP 7

Мы спорили, спорили. И, наконец...утвердили!

Php-сообщество с попкорном и колой давно уже наблюдало за баталиями в RFC по поводу возможности явного определения скалярных типов (int, string, float, bool) для аргументов, а также значений функций в грядущем PHP 7.

2015-03-18 irul

RFCRFC Exception для fatal-ов принят

"PHP RFC: Exceptions in the engine (for PHP 7)" за авторством Никиты Попова был принят. Голосование началось и закончилось в оригинальные числа - 23 февраля и 8 марта smiley.

Суть RFC

Если в двух словах, то в RFC предлагается использовать исключения (Exception) на уровне движка, что позволит вместо fatal и recoverable fatal ошибок выбрасывать исключения.

2015-03-11 alek13

Тонкости языкаРеализация поиска созвучных слов на PHP — Небольшой пример использования функций metaphone и levenshtein.

В этом уроке я покажу вам, как можно использовать две малоизвестные функции PHP (metaphone($str) и levenshtein($str1, $str2)) для поиска созвучных слов на PHP. Поставив эти функции, вы получите исключительные результаты при сопоставлении фраз - для поиска орфографических ошибок или просто для нахождения фраз, звучащих одинаково.

2015-02-03 irul