Комментарии 25
Этот выпуск оказался «более лучше» полезен, чем предыдущие. Спасибо за подборку!
Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.
Class Friendship allows a class to be better encapsulated by granting per-class access to protected members.
Как-то очень спорно.
Страшно представить, к какой адской запутанности кода может привести подобное решение.
Тоже считаю это вредоносным предложением. Вон в C++ добавили дружественные классы, так теперь мучаются с ними.
Голосующие товарищи видимо с вами согласны. А вот мне наоборот, нравится идея. Использовал бы дружбу повсеместно в домене для лучше инкапсуляции. Например стало бы возможно запретить любое изменение связанной сущности кроме как через агрегат.
О какой лучшей инкапсуляции можно говорить в контексте предоставления доступа к приватным полям сторонним объектам?
Пример:
Итого берем аггрегат, проверяем какие то бизнес правила, обновляем пост. Другому программисту поставили задачу реализовать обновление поста в другом месте, он извлекает пост — обновляет — кладет в хранилище. Заботливо спроектированный защитный метод пошел по ветру.
Я хочу сказать что если сущность x является частью агрегата y то мне нужен способ инкапсулировать работу с x через y. Это лучше чем просто следовать эвристике «делаем все через корень агрегата».
Class User
public function updatePost($args)
{
if ($this->status->isPrymary()){
$this->post()->update($args);
}
}Итого берем аггрегат, проверяем какие то бизнес правила, обновляем пост. Другому программисту поставили задачу реализовать обновление поста в другом месте, он извлекает пост — обновляет — кладет в хранилище. Заботливо спроектированный защитный метод пошел по ветру.
Я хочу сказать что если сущность x является частью агрегата y то мне нужен способ инкапсулировать работу с x через y. Это лучше чем просто следовать эвристике «делаем все через корень агрегата».
Может быть разумнее было бы расширить список модификаторов доступа? Например, модификатор package в java или модификаторы в c# решают подобные проблемы куда изящнее.
Аьв недавно столкнулся с такой необходимостью. К примеру паттерн билдер где работа делегируется объектам и не хочется все методы делатт паблик
Не используйте ассоциативные массивы, вообще говоря, никогдаЯ бы не был настолько категоричен, только если речь идёт об очень больших массивах. Делал своё мини исследование на эту тему в рамках highloadcup. Автору удалось уменьшить использование памяти в 2 два раза, у меня с помощью разбивки одного ассоциативного массива на несколько SplFixedArray получалось уменьшить расход памяти в 8,5 раз.
Тоже подумал сразу о SplFixedArray. Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
Сейчас на Yii 1.1.15 делаю сайт благотворительного фонда. В этом мне помогает мамина коллега по ОНФ. Доверяю этой версии после изучение книги Дронова по HTML5 и PHP. Именно он использовал эту версию фреймворка. Эту книгу мне подарили на Новый 2018 Год.
Остался месяц и сайт будет готов на этом фреймворке.
CMS: Вышла новая версия CMS на Symfony eZ Platform 2.2: новость в блоге, GitHub.
Касательно «Phpdbg намного быстрее Xdebug для подсчета покрытия» — есть сомнения, что результаты покрытия совпадают, о чем предупреждает сам автор Xdebug. Стоит отнестись с осторожностью:
hackernoon.com/generating-code-coverage-with-phpunite-and-phpdbg-4d20347ffb45
hackernoon.com/generating-code-coverage-with-phpunite-and-phpdbg-4d20347ffb45
хочу себе блестящего слоника)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

PHP-Дайджест № 134 (24 июня – 8 июля 2018)