Рекомендации PSR для произвольных объектов Foo и Bar

Если вы давно не заглядывали в стандарты PSR PHP-FIG, то многое могли пропустить:) Они развиваются постоянно и добавляются все новые интерфейсы. Сегодня хочу представить спецификацию PSR, которая регламентирует создание произвольных объектов в различных примерах использования. Это относительно новый репозиторий, но недавно вспомнил о нём и теперь расскажу...
Основные изменения в версиях PHP
В этом списке не ставится целью перечислить все изменения между версиями в PHP, для этого существует официальная документация, но можно попробовать охватить относительно значимые изменения, произошедшие от версии 5.4 до текущего состояния (на момент написания это ...
Обработка ошибок и исключений в PHP
После выхода PHP 7 механизм встроенных ошибок был сильно изменён и теперь представляет собой разделение на классы Error (Фатальная ошибка) и Exception (Исключение). Первый содержит перечень унаследованных от него типизированных классов для фатальных ошибок PHP, а Exception должен содержать исключения с возможностью обработки, которые будут от него унаследованы. Вместе эти два основных класса объединены интерфейсом Throwable, соответственно и...
Использование замыканий в PHP
Замыкание в PHP - это способность анонимной функции взаимодействовать с её окружением. То есть переменные из контекста замыкания могут быть использованы внутри функции.
Анонимная функция - это обычная функция не имеющая названия. Может быть присвоена переменной и не только, также может быть возвращаемым результатом функции или метода, аналогично экземпляру внутреннего класса Closure, которым представлена.
Пример обычной...
Для чего нужны атрибуты в PHP
Атрибуты вида #[CustomAttribute] добавлены в PHP 8.0 (RFC, Документация)
Атрибуты предоставляют возможность добавлять различную конфигурацию к конкретным классам, методам, константам класса и тд. При этом, пока вы не начнёте обращаться к этой конфигурации, выполнение PHP никак её не воспринимает, как и обычные комментарии. Через рефлексию можно запросить атрибут конкретного класса/метода и...
Вы еще не зарегистрировались? Войти
PHP функция compact()
Довольно редко используемая функция compact() в узкоспециальных случаях значительно упрощает код. В некоторых фреймворках при отображении шаблона (так можно сделать в Laravel, например), если совместить её с передачей параметров, получится так.
Неоптимизированный код:
return view('template', [
'x' => $x,
'y' => $y,
]);
Оптимизированный при помощи compact():
return view('template', compact('x', 'y'));
Как видно из примера, функция compact из существующих переменных собирает соответствующий массив данных, где название переменной соответствует её значению.
Подробнее в документации
Самый ужасный код, который когда либо встречал
Когда мне говорят, что нужно рефакторить какой-то плохой участок чужого кода, мне интересно, насколько сильно он подходит под определение мной однажды виденного и ставшего образцом, скажем так совершенного и идеально ужасного кода. Этот образчик наблюдал в средней известности компании и проекте, последний в своём роде был очень даже ничего по популярности. Но секрет его популярности был в том, что он один из первых занял нишу и в ней...
Мир PHP с высоты птичьего полёта

Энтузиаст попытался изобразить экосистему PHP в виде городской среды. Инфографика выглядит красиво. Не стоит искать технических отсылок к реальной работе фреймворков, их там нет. Скорее юмористический обзор от автора на технологии, которые ему известны. Дополнительная задачка на внимательность - называется "найди Yii". Этот фреймворк там тоже есть.
Для чего нужен оператор yield в PHP
Оператор yield — основа генераторной функции. Отдалённо этот оператор похож на оператор return , так как тоже реализует возврат, только вместо того, чтобы останавливать выполнение текущей функции, yield предоставляет значение коду, зацикливающемуся на генераторе, и приостанавливает выполнение функции генератора.
Для понимания, что делает yield, необходимо понимать, что такое генераторы. Генераторам же предшествуют итераторы. Когда вы...
Использование псевдотипа iterable в качестве параметра
Тип iterable может использоваться как тип параметра для указания, что функция принимает набор значений, но ей не важна форма этого набора, пока он будет использоваться с foreach.
function example(iterable $iterable) {
foreach ($iterable as $param) {
// ...
}
}
Каким типом может быть этот набор? Параметр принимает любой массив (array) или объект, реализующий интерфейс Traversable. Оба этих типа тоже итерируются с помощью foreach.
Псевдотип iterable впервые появился в PHP 7.1.0
Функция PHP chunk_split — разбивает строку на фрагменты
chunk_split()
Позволяет разбить строку на фрагменты по заданному количеству символов. Может пригодиться, когда нужно отобразить пользователю многозначный код в читаемом виде или в иных подобных случаях.
Имеет три параметра:
string string — разбиваемая строка.
int length — длина фрагмента. Необязательный, по умолчанию 76.
string separator — последовательность символов, используемая в качестве конца строки. Необязательный, по умолчанию "\r\n".
Возвращает: string
Пример:
Должен ли код подстраиваться под его тестирование?
«Команда Android пошла ещё дальше — телефоны основной команды разработки почти постоянно работают на ежедневной сборке. Идея в том, что разработчики будут писать меньше кода с ошибками, если от этого зависит их возможность позвонить домой.»
(«Как тестируют в Google» Джеймс Уиттакер, Джейсон Арбон, Джефф Кароло)
Хоть однозначного ответа на этот вопрос нет, можно рассмотреть конкретные случаи, когда тестирование кода влияет в той или...
SOLID - основные принципы проектирования в ООП

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

Трейты в PHP существуют с версии 5.4, то есть относительно давно, они добавляют возможность переиспользования кода без наследования, когда один и тот же код можно использовать в совершенно не связанных между собой классах. Факт использования трейтов во фреймворке Symfony, говорит о том, что они могут без проблем вписаться в современные архитектурные решения кода и ничуть не устарели. В целом, они...