Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
Новости и релизы
- Анонсирован Laravel 5.1 LTS — Ближайший релиз Laravel будет первым с долгосрочной поддержкой.
- HHVM 3.7.0
- WordPress 4.2.1 и 4.2.2 — Оба обновления содержат исправления критических уязвимостей.
- Yii 2.0.4
- Zend Framework 2.3.8 и 2.4.1
- Symfony 2.3.8 и 2.6.7
- Стартовало повторное голосование по PSR-7 — Ранее голосование было отменено и вернулось на этап ревью. Обзор изменений по сравнению с предыдущей версией. Также в тему о нумерации стандартов PSR и почему PSR-7 после PSR-4.
PHP
- RFC: Short Closures — В PHP 7.1 предлагается реализовать короткий синтаксис для анонимных функций:
$x ~> $x + 1;
Подобное уже реализовано, например, в Hack:$x ==> $x + 1;
.
Инструменты
- voryx/Thruway — WAMP (Web Application Messaging Protocol) роутер и клиент для PHP.
- Sami — Генератор документации к API. Туториал.
- MacFJA/PharBuilder — Автоматизирует создание phar из Composer-пакета.
- Visithor — Библиотека для тестирования роутов на ожидаемые HTTP-коды. Пост в поддержку.
- phpbadge — Инструмент для создания svg-бейджей.
- davispeixoto/PHP-Batch — Библиотека для реализации батч-процессинга.
- wapmorgan/PhpCodeAnalyzer — Анализатор используемых расширений PHP в коде, не включенных в ядро. Прислал wapmorgan.
- PHPPm — Менеджер пакетов, один из возможных вариантов развития composer. Прислал wapmorgan.
- AsyncTask — AsyncTask делает возможным правильное и простое использование потока. Прислал dmamontov.
- DavBackup — Создание резервных копий сайтов в облаках через WebDAV. Прислал dmamontov.
- gatakka/PGF-Router — Концепт роутера без использования регулярных выражений.
- Codebug — PHP Xdebug client frontend — Легковесный отладчик для Mac OS X.
- dantleech/phpbench — Инструмент для бенчмарков.
- libphonenumber for PHP — Библиотека для парсинга, форматирования и валидации международных телефонных номеров.
- BitOne/php-meminfo — Расширение предоставляет информацию об использовании памяти в PHP.
- JakubOnderka/PHP-Parallel-Lint — Инструмент проверки синтаксиса, анализирующий файлы параллельно.
- TidalLabs/Slacker — Консольный клиент для Slack.
Материалы для обучения
Symfony
- 10 вещей, которые я хотел бы знать перед стартом проекта на Symfony — Прислал Игорь Оначенко.
- Laravel vs Symfony — 5 Шагов к Выбору PHP Фреймворка — Прислал Игорь Оначенко.
- Туториал по Symfony2: авторизация и аутентификация
Laravel, Lumen
- Широковещательные события в Laravel 5.1 — Отправляем события в браузер с помощью pusher.com и socket.io.
- Мини API на Lumen
- Туториал: Разрабатываем микросервис на Lumen
Yii
Phalcon, Zephir
Zend Framework
- О внутреннем представлении значений в PHP 7 — Часть 1 — Отличный пост от Никиты Попова о том, как изменились zval в PHP 7.
- Автоматизированное развертывание масштабируемого решения для WordPress — Кластер с использованием MySQL, GlusterFS и Nginx.
- Рекомендации по использованию stderr в консольных командах Laravel/Symfony
- PHP's callable typehint too loose? — О несоответствии
call_user_func($a)
и$a()
. - Сравнение тайп хинтинга в PHP 7 и Hack
- JPHP – альтернативная реализация PHP для JavaVM — Подробное описание также было раньше на Хабре.
- Эффективное логгирование в PHP с помощью Loggly
- Satis: создаем свой репозиторий пакетов для Composer
- Ресурсы по PHP7
- Копипаст рулит! В PHP.
- Монолитные репозитории для PHP и Composer
- SPL итераторы вопреки производительности
- Удобная отладка с PHPixie Debug
- Загрузка и хранение фотографий в Web-приложениях
- Habrahabr в PDF-варианте для электронной книги
- Размазываем PHP
- Прогресс выполнения тяжелой задачи в PHP
Занимательное
- Cherimola Library — Когда обычных
true
иfalse
недостаточно. Прислал elfet.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Присылайте ссылки на интересные статьи или полезные инструменты, которых не было в PHP-Дайджестах, и ваше имя будет рядом с присланной ссылкой в выпуске.
Прислать ссылку
Быстрый поиск по всем дайджестам
< Предыдущий выпуск
Комментарии (60)
SamDark
12.05.2015 03:01+1PSR-7 уже на повторном голосовании. Проходит с перевесом.
LastDragon
12.05.2015 07:44А оно кому-то вообще нужно? Особенно учитывая что они сами пишут что практически все существующие библиотеки не используют value object…
SamDark
12.05.2015 12:38На самом деле да:
1. Изолируют request/response практически все современные фреймворки, но делают это каждый по своему.
2. value object не нужен до тех пор пока мы не начнём использовать что-то вроде reactphp.org или daemon.io. Они всё более популярны. Знаю человека, который запускал по такому принципу Yii в продакшне.LastDragon
12.05.2015 13:102. А там вроде уже не настоящий value object — в последней версии разрешено возвращать $this из with* если оно не привело к изменению значения, интересно, какие из with* методов подходят?
SamDark
12.05.2015 13:46Разве возврат того же инстанса в случае не изменения значения противоречит value object?
LastDragon
12.05.2015 14:05Как/кем определяется изменилось значение или нет?
SamDark
12.05.2015 14:21Классом, реализующим интерфейс. Скорее всего, все будут делать так:
if ($this->something === $newValue) { return $this; }
LastDragon
12.05.2015 19:29Вот, только это значит что в разных реализациях вполне может оказаться что изменение внутренностей не будет создавать клон. Утрируя: ну вот решил автор что при изменении заголовков сам запроса не меняется, а сама библиотека при этом офигенно-офигенная и нужна в нашем древнем проекте просто позарез — привет цепочки, привет отладчик, прощайте выходные… Если уж решили создать свой 15 стандарт с блекджеком и ..., то надо было делать максимально однозначно.
SamDark
13.05.2015 04:19Не не не, если реализация по PSR, то при изменении (если данные поменялись) обязан создаваться новый инстанс. Этот момент как раз оговаривается явно.
PQR
12.05.2015 16:42Я вот ещё смотрю на RingPHP, который под капотом Guzzle 5+ — тоже вроде какая-то абстракция над HTTP. Как это всё соотносится?
SamDark
13.05.2015 04:21PSR сделан теми же людьми, см. member projects. На него со временем большинство там упомянутых перейдут.
Вообще PSR-ы пишутся бег оглядки на существующие реализации. На будущее.
Freezy
12.05.2015 06:29+2github.com/davispeixoto/PHP-Batch — классы все пустые.
PQR
12.05.2015 16:40Там в описании внизу написано: An amazing «Thank you, guys!» for Jetbrains folks, who kindly empower this project with a free open-source license for PhpStorm — кто-то запилил себе бесплатную лицензию на PhpStorm, понаписав open-source пустых классов!)
sectus
12.05.2015 08:17Замкание всей области видимости в функцию — это, мне кажется, слишком не «php way». Появятся проблемы с производительностью и циклическими ссылками, которые ещё не готовы решать.
lucky_brick
12.05.2015 10:33+2Замкание всей области видимости в функцию — это, мне кажется, слишком не «php way». Появятся проблемы с производительностью и циклическими ссылками, которые ещё не готовы решать.
полностью согласен с оратором. никогда этого не было и то что в майнтенерах пхп появилось несколько «ужаленных» которые пытаются тащить из скалы, ерланга, хаскела и при этом тащить просто какие-то фишки это плохо
вот новое ядро — это хорошо.
если уж захотелось сделать покороче… то простой почти безболесненный способо это сделать ввести алиас для function — например fun
но этж ну вообще не главное!
надо думать о развитии SPL!!!dim_s
12.05.2015 10:45С чего вы взяли, что такая фишка есть только в скале, ерленге и хаскеле. Короткий синтаксис есть в C#, Java 8, C++, Dart, JavaScript (ES6), Perl6, Groovy, Python, Swift и еще во многих языках. Он полезен и удобен, особенно во всяких event-подобных штуках.
Замыкание скорее всего будет производится не всей области видимости, а только тех переменных, которые используются внутри функции, главное чтобы разработчики php верно реализовали это.sectus
12.05.2015 12:13Да, действительно. ...all variables used in the body of the anonymous function will automatically be bound to the anonymous function closure from the defining scope.
Вещь в любом случае интересная.
vshemarov
12.05.2015 10:46+1надо думать о развитии SPL!!!
И в первую очередь — о его производительности. SPL-итераторы — очень интересная вещь, но тормоза в 7 раз по сравнению с обычными циклами — это жуть.dim_s
12.05.2015 12:07Итераторы обычно нужны для экономии памяти, для ленивых операций над коллекциями. В задачах где требуются итераторы тормоза в 7 раз не делают погоды. Цепочка итераторов способна творить чудеса по производительности, как пример Stream API из Java 8.
vshemarov
12.05.2015 12:13Ну вот у меня есть задачи, где использование итераторов значительно сократило бы и объем кода и его читаемость, но я вынужден был отказаться от них именно из-за тормознутости.
… как пример Stream API из Java 8
Так в том-то и дело, что речь о реализации SPL-итераторов в PHPdim_s
12.05.2015 12:21В любом случае, итераторы нельзя сделать быстрее, они никогда не смогут работать быстрее обычного цикла или с такой же скорость. Это объекты, вызовы методов, поднимается стек вызовов и на все это затрачивается время. Я думаю итераторы можно немного оптимизировать по скорости выполнения, но не намного.
bestxp
12.05.2015 11:05+3PHPPm и хостингер не выдержали хабраэффекта
pronskiy Автор
12.05.2015 15:18Поменял ссылку на гитхаб github.com/PHPPm/phppm
bestxp
12.05.2015 17:35+1А в кратце можно в чем их фишка? По гитхабу то считай тот же композер)
happyproff
13.05.2015 17:34+1Это менеджер composer-пакетов, которые собираются вести себя как системные пакеты, то есть имеют бинарники, конфиги в /etc, логи в /var/log и т.д.
zviryatko
12.05.2015 11:12Лучше вместо короткого синтаксиса анонимных функций сделали бы что-то похожее на stream API в java 8 www.deadcoderising.com/java-8-no-more-loops, только нативное, кстати вот реализация в одном фреймворке ouzo.readthedocs.org/en/latest/utils/functions.html#extract
Alexeyco
12.05.2015 11:37-1С одной стороны, некоторое количество php-кодеров (можете не любить нас, но мы есть) давно ждало от php некоего движения в сторону чего-то типа NodePHP. React — да, но это react. Это не php, а хотелось, чтобы к этому пришел Zend. Но теперь, когда я уже весь пропитался и проникся go, я уже ничего не жду. Мир и уважение Zend, PHP и всему сообществу их разработчиков и пользователей. Но давайте честно — не поздновато ли? Берем то, что есть в современном мире — хотя бы ту же самую NodeJS, и получаем потрясающий (не лишенный недостатков, конечно), стек возможностей, которых просто нет у PHP, который тоже недостатков не лишен, кстати. Прошу, не надо про HHVM и прочие, одичало-бесноватые, на мой личный взгляд, решения. Я постоянно слышу «PHP создавался не для этого». Но позвольте уточнить — не для чего создавался PHP? Не для создания современных сайтов?
Да, есть кодовая база, чуть ли не самая огромная среди конкурентов — Wordpress… тот же Битрикс, как бы я к нему ни относился. Но всякие новые штуки выходят с использованием других технологий. Вот вы все как считаете — PHP быть? И сразу вопрос вдогонку — вы уверены, что не выдаете желаемое за действительное?SamDark
12.05.2015 12:45+3Быть. Уверен. Новые штуки выходят с использованием всего и я бы не стал утверждать, что новых штук на PHP не выходит, это всё-таки 82% всего веба.
dim_s
12.05.2015 17:3382% от количества проектов, а не от количества посещаемости этих проектов. Миллион проектов на вордпресе и других cms делают эту статистику, но это же не значит, что в этих проектах участвует программист. Если бы можно было бы посчитать процент проектов, в которых участвовал программист, то это была бы справедливая статистика.
SamDark
13.05.2015 04:24+2М… хабр, Yahoo, Facebook, Wikipedia, Flickr, Digg, SourceForge, Вконтакте, mailchimp, Etsy, Zynga. Мало? Могу ещё.
dim_s
13.05.2015 09:07PHP is used by 82.0% of all the websites whose server-side programming language we know.
Пишут, что от количества сайтов. Facebook -> Google, Microsoft, Bing, SourceForge -> Github, Bitbucket, Вконтакте -> Одноклассники, Twitter, можно приводить бесконечное число известных крупных проектов сделанных не на php. Поэтому я написал, что берут они от количества, т.е. любая минимальная страничка сделанная на php +1 к этому рейтингу.SamDark
13.05.2015 13:44+1Конечно они считают количество. Посещаемость мало кто отдаёт. И всё-таки, я считаю, что такая метрика популярности довольно справедлива. Ничто не мешает делать мелкие проекты на том же Python или Ruby или Perl… на чём угодно. Но почему-то они не популярны для этих целей. В то же время, сверхкрупные проекты на PHP делаются и успешно.
Я не утверждаю, что PHP очень хорош как язык, но он развивается, он отлично подходит для веба, лучше, чем остальные, и будущее у него определённо есть. Даже если он умрёт, то медленно и не скоро.Alexeyco
13.05.2015 17:33> он отлично подходит для веба, лучше, чем остальные
Что позволяет вам делать подобные заявления?
Вот я могу парировать. Websockets — тоже, ведь, веб? Постоянные соединения — тоже веб? А можно мне пример того, как на чистом php сделать простой чатик на постоянных соединениях? Лучше других, говорите? Ну-ну.
И вообще — какая разница, что есть сейчас — если перечитать мой комментарий (хотя бы просто перечитать), станет понятно, что я не о реалиях, а о тенденциях. Статистика — продажная беспринципная девка. Еще и заразная.pronskiy Автор
13.05.2015 17:42+1Websockets чатик на пхп делается не сложнее чем на любом другом языке socketo.me/demo
Alexeyco
13.05.2015 18:00-1socketo.me/docs/deploy
Не очень похоже на чистый PHP. Кому как, конечно, но вот я считаю, что технология — это что-то общепринятое. Если мы говорим о трюках, я сразу не засчитываю это за аргумент, я писал о чистом PHP.pronskiy Автор
13.05.2015 19:30+2На странице все более чем общепринятые практики.
Написано, что будет работать на чистом PHP, но если хотите улучшить производительность, то можете установить дополнительные расширения.
Но даже на стандартном наборе этот сервер будет держать десятки тысяч соединений без проблем.
SamDark
14.05.2015 11:58+1Что позволяет вам делать подобные заявления?
То, что он работает везде, есть у каждого, даже самого ужасного хостера, заводится с пол пинка, кушает код практически любого качества и имеет тучу готовых и полуготовых решений.
Потому что именно на нём сделали Wordpress и у него были конкуренты под .NET и Java точно, но вот не взлетели из за гемора с развёртыванием и хостингом. То же про Drupal, Joomla и т.д.
Вебсокеты — не подавляющее большинство проектов. Я бы даже сказал, что довольно редко нужны. Ну и не вижу особых проблем с ними работать из PHP. Конечно, сразу всплывают требования к окружению, но они сходные и в случае Python или Ruby.Alexeyco
15.05.2015 15:05Желаемое за действительное, как я и говорил )))) и хоть обминусуйте меня — от этого PHP не станет лучше. Можете выместить на мне все свое недовольство, пожалуйста.
Заводится у любого хостера, да? Так… а почему тогда мои проекты на Symfony2 работают, мягко говоря, не везде? Аааа… ясно… версия PHP не та… понятно.SamDark
15.05.2015 15:42Мы сейчас про PHP или про Symfony? Symfony — довольно сложная штука и требования соответствуют. Wordpress, Drupal, Joomla и т.д. заводятся практически везде. Даже на устаревших версиях десятилетней давности.
Alexeyco
18.05.2015 15:21Как только мы говорим о том, что в сообществе (сейчас меньше, с распространением composer и Symfony2, признаю, меньше) засилие говнокода и говнокодеров, нам приводят в пример Symfony2, когда мы начинаем ныть про производительность и обратную совместимость, нам под нос суют Drupal.
Не хочу я Drupal. SQL-запросы (не знаю, норма это или не очень) в шаблонах я уже видел. Больше не хочу.
Расскажу притчу.
В одной электричке ехали три мудреца — Дэн и Сяо. Правда один был только будущим мудрецом (Дэн), а другой мудрец вообще хрен знает, как попал в эту электричку (Сяо). Третьего называть мудрецом не хочется (он слишком маленький для мудреца), но чтобы ему не было обидно, все-таки назовем. Его имя Пин.
Пин был «программистом», это было понятно. Поезд изгибался и пытался переехать с Балашихинской ветки на Горьковскую, а Пин в это время усиленно запускал Filezilla. «Правит прямо на сервере, значит там наверняка PHP»,- подумал Сяо, и стал протискиваться ближе. Подойдя на расстояние, с которого можно было рассмотреть содержимое открытого Notepad++, он увидел нагромождения HTML и SQL. «Точно PHP»,- подумал Сяо, замечая несколько колонок аккуратно собранных инклудов. Дэн тем временем судорожно правил что-то, попутно огребая по телефону.
Вдруг откуда-то раздался вопрос «простите, а вы где учились»? Милая дама (Сяо даже заинтересовался), обнимая маленького Пина, продолжала: «мой маленький Пин интересуется компьютерами, и тоже хочет стать компьютерщиком». Дискомфорт от поездки в переполненном душном вагоне, в котором, спасибо, что хоть летом не топят (в этот раз не топили) сменился ожиданием реакции Дэна. Сяо по себе знал, что чувствуешь, когда ты приходишь в гости, а тебе говорят «а чо у меня винда не грузится, ты ж программист, чо, э». Он ожидал реакции Дэна.
Но Дэн не повел и глазом. Тот наоборот выправился и с гордым видом объяснил стройной и молодой «Хоши Миновне», что он даже не начинающий программист. Но он одобряет интерес маленького Пина к компьютерам. Какой ВУЗ посоветовать, он не знает, но на работе ему когда-то доверили заниматься сайтом организации, и теперь он вообще хочет увольняться, и дальше стать программистом. Что, в общем-то, было бы разумно для человека, у которого так хорошо все получается.
Электричка ехала, в общем-то историю можно было бы закончить. Но вдруг какой-то голос прервал беседу стройной и молодой Хоши Миновны и Дэна.
— Простите, я вижу, что вы компьютерщик. Не подскажете, а почему у меня на моем маке стала так медленно грузиться эппловский виндус.
Повернувшись, все трое — стройная Хоши Миновна, Дэн и маленький Пин увидели Сяо.Alexeyco
18.05.2015 15:36Небольшая эррата.
> Пин был «программистом», это было понятно.
Дэн, конечно же… впрочем, кто знает, может и Пин уже тоже программист. Хотя Сяо больше интересует судьба Хоши Миновны.
SamDark
15.05.2015 15:44Обминусовывать не буду :) Вы аргументируете и не перегибаете. Хороший спор :)
Alexeyco
13.05.2015 17:22А никто не пытался спросить у Хабра, Yahoo, Facebook (ха-ха, facebook, как же), Flickr, Digg, SourceForge, Вконтакте (ха-ха, вконтакте, как же) и так далее — на чем бы они стали делать свои сервисы, если бы стартовали сейчас? Я призывал и продолжу призывать к адекватности оценок, а не к подмене действительности. Я кодю на php, но стараюсь трезво смотреть на вещи. Я кодю на php «потому, что...», а не «для того, чтобы...». Разница есть?
SamDark
14.05.2015 12:05+1Знаю на тему Yahoo. Они бы так и использовали PHP для фронта. Также знаю проекты, где сайт (то есть CMS, всякие формы фидбека и т.д.) делается на PHP, а продукт на Java. Причём изначально делалось всё на Java и впоследствии сайт был переписан на PHP. Причины — не надо билдить, правки вносить быстрее, это может делать менее дорогой сотрудник, найти и заменить которого значительно легче.
SamDark
14.05.2015 12:06+1Ещё могу сказать про наш stay.com. Также делали бы на PHP, хотя отдельные части у нас бегают на go, а приложения, естественно, на Java и ObjectiveC.
Fedot
Вот не могу понять зачем это нужно? Глазами ведь выцепить такое при чтении кода будет в разы сложнее.
LastDragon
Нужно — сейчас слишком многословно получается, но вот тильда?! *рука лицо*
janson
Ну сейчас по-крайней мере анонимная функция при её описании выглядит как функция. А вот это '~>' — сахар ради сахара?
Раздел с описанием предлагаемого синтаксиса — настораживает. Получится такая же шаурма со стилем именования функций PHP, за что его ругают, но только теперь — с новым синтаксисом.
Теперь — банановый.
LastDragon
> А вот это '~>' — сахар ради сахара?
А вот это есть практически во всех языках (и даже в java где оно совсем-совсем чужеродно), ибо набирать километры незначащего кода очень быстро надоедает.
dim_s
У меня возникает только один вопрос, почему нельзя использовать комбинацию "->" вместо "~>".
LastDragon
Убогий парсер. Из-за этого практически все новые синтаксические конструкции вводятся с помощью новых ранее не используемых символов (пространства имен, например), а т.к. "->" уже занято, то выбрали свободную тильду (минусующий, как её набирать то?).
gro
Так они же тотально переписывали парсер и теперь всё должно было стать круто.
LastDragon
Они точно переделали внутренности интерпретатора (http://habrahabr.ru/post/222219/) за счет чего и получили ускорение, а вот насчет парсера я не уверен.
dim_s
Мне интересно, чем оно забито, если такой комбинации еще нет. Даже если считать что это "-" и ">", то как тогда реализовали "=>" как "=" и ">" и плюс к этому в foreach и объявлении массивов?
gro
$obj->method();
dim_s
Совсем забыл, точно. Облом =( Тогда понятно почему ~>, а ==> выглядит еще более убого.
AmdY
У вас очень правильное замечание. Мне кажется следует использовать правило как в других языках — больших анонимок лучше использовать полное function, а для однострочных ~>
В примерах есть usort($array, ($a, $b) ~> $a->val <=> $b->val);
usort($array, function($a, $b) { $a->val <=> $b->val; }); — PSR этот код просит разнести на пару строк из-за {}