PHP 7.1 - 9 новых функций, о которых вам стоит знать

  • PHP
  • 9 месяцев назад

Наконец, в свет вышла PHP 7.1, новая минорная версия PHP, которая включает в себя ряд новых функций, изменений и исправления ошибок. В настоящей статье мы рассмотрим некоторые новые замечательные функции PHP 7.1, а именно:

  • Итерируемый псевдотип
  • Замыкания через функции обратного вызова
  • Синтаксис с квадратными скобками для списка ()
  • Поддержка ключей в списке
  • Видимость констант класса
  • Типы, допускающие значение null
  • Функции типа void
  • Захват исключений разных типов
  • Исключение «Слишком мало аргументов»
Читать далее...

Как создать собственный контейнер внедрения зависимостей на PHP

  • PHP
  • 1 год назад

На запрос «контейнер внедрения зависимостей» packagist.org выдает более 95 страниц результатов. Так что можно с уверенностью утверждать, что это «колесо» уже изобретено.

Но ни один шеф-повар не учится готовить только по готовым блюдам. Точно так же, программист не учится только по «готовому коду».

Давайте подумаем, какие задачи мы хотим поручить нашему будущему контейнеру. Для начала выделим в «Контейнере внедрения зависимостей» две роли – «внедрение зависимостей» и «контейнер».

Читать далее...

Путеводитель Symfony: Компонент HTTPKernel

В этом руководстве мы рассмотрим основные компоненты, с помощью которых создаются приложения:

  • HTTP Kenel и HTTP Foundation
  • Диспетчер событий
  • Маршрутизация и YAML
  • Внедрение зависимости
  • Консоль

Symfony предоставляет компопонет HttpKernel который реализует протокол HTTP: он конвертирует Request в Response.

Все вращается вокруг следующего интерфейса:

<?php

namespace Symfony\Component\HttpKernel;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

interface HttpKernelInterface
{
    const MASTER_REQUEST = 1;
    const SUB_REQUEST = 2;

    /**
     * @param Request $request
     * @param int     $type
     * @param bool    $catch   Whether to catch exceptions or not
     *
     * @return Response
     */
    public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true);
}
Читать далее...

Руководство по модульному тестированию. Часть V: имитирующие методы и переопределение конструкторов

  • PHP
  • 1 год назад

В предыдущем уроке по PHPUnit вы познакомились с такими эффективными инструментами, как имитирующие объекты и методы-заглушки. Эти понятия являются залогом успешного модульного тестирования, и как только они «улягутся» у вас в голове, вы начнете понимать, насколько полезным и простым может быть тестирование.

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

Читать далее...

Руководство по модульному тестированию. Часть IV: Имитирующие объекты, методы-заглушки и внедрение зависимости

  • PHP
  • 1 год назад

В предыдущих статьях я показал вам, как писать базовые тесты для базовых методов. Теперь вы можете пользоваться аннотацией @dataProvider, создавать отчеты о покрытии, и знаете, как пользоваться отдельными утверждениями.

До этого мы писали тесты для простых методов. Вызов внутреннего метода в рамках одного и того же класса, вставка блока if, но ничего особо сложного.

Читать далее...

Улучшенная сериализация с Symfony

Если вы когда-либо создавали сценарий экспорта или API, то вам наверняка приходилось форматировать свой контент и иметь дело с сериализацией.

В Symfony этой задачей зачастую занимается JMS Serializer (так указано в документации Symfony).

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

Читать далее...

Обучающее руководство по модульному тестированию. Часть III: Тестирование защищенных/частных методов, отчеты о покрытии и индекс CRAP

  • PHP
  • 2 года назад

В третьей части моего обучающего руководства по тестированию я объясню, что такое покрытие кода и почему 100%-е покрытие кода не является обязательной целью.

Но сначала поговорим о тестировании ваших частных/защищенных методов!

Если вы загляните во вторую часть этого руководства, то заметите, что мы инстанцируем класс, который хотим протестировать, через обычный запрос new. У вас может возникнуть вопрос о том, как тестровать защищенные или приватные методы, если к ним невозможно получить доступ напрямую через инстанцированный объект ($url->someProtectedMethod()).

Читать далее...

Руководство по модульному тестированию. Часть II: Утверждения, написание настоящего теста и аннотация @dataProvider

  • PHP
  • 2 года назад

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

Но этот тест познакомил вас с самым базовым утверждением PHPUnit - assertTrue().

Википедия дает следующее определение утверждения:

Читать далее...