Как стать автором
Обновить

PHP 7.0.0

Время на прочтение1 мин
Количество просмотров57K
Всего голосов 85: ↑74 и ↓11+63
Комментарии103

Комментарии 103

Некоторые проекты работают еще на 4-ке. Большинство на 5-ке, при чем не важно какой. Особого смысла в переходе не было.
7-ка первая версия пхп (после 4-ки) на которую появляется смысл переходить, хотя по уму конечно 7.1 подождать…
7.0.1?
Проектов много:) Начнем переход на 7.0.0 уже, но самые большие, критичные и важные подождут именно 7.1.0.
Тогда уж было было логичино ждать 7.1.1.
Вкусовщина. 5 и некоторые другие релизы после вполне заслуживают, чтобы на них переходить.
Безусловно от перехода к 4=>5 и 5.x=>5.y плюсы появляются, но лично у нас они просто не перевешивают принцип «работает = не трогай». А вот 7-ка это первая версия (после 4-ки, на которую мы перелезали с 3-шки), в которой этим принципом можно в изрядной степени поступиться.
Почему? ООП в пятёрке был не нужен а строгая типизация нужна?
Производительность нужна.
7-ка вроде как очень неплоха, при чем не только по результатам тестам, но и по декларируемым принципам улучшения оной. Что очень и очень радует.
ООП в 5-ке вещь полезная, но переводить из-за этого стабильные работающие проекты с 4-ки на 5-ку реализуя принцип «ооп ради ооп» смысла не видели. Тот же drupal достаточно долго жил без использования механизмом ООП php и никто не жужжал:)
Ну, зачем-то и Drupal перевели. Видно, что не ради ООП как такового.
То есть безнадежно устаревшее 100% дырявое ПО вас не смущает совершенно? Не хотел бы я оказаться на вашем сайте…
То есть безнадежно устаревшее 100% дырявое ПО вас не смущает совершенно?
У Вас тут два утверждения, ответим отдельно
1) Термин «устаревшее» он гуманитарный, а не технический. Аргументация вида «ой, это устаревшее, это не модное, ой всё» не убедительна ни разу. Так что это мы принять не можем…
2) Термин «дырявое» он уже технический. И тут Вы отчасти правы. Но 4-ку мы на проектах доступных снаружи не используем (парсеры, грабберы, обработка данных, спайдеры, аналитика), а за секьюрити фиксами 5-ки следим.
1) под устаревшим я имею ввиду не моду, а то, что к примеру, разработчики не поддерживают его (аналогично устарел IE7, и пока не устарел IE11, но ему до нового года осталось)
2) интранет это, конечно, не так плохо, но всё же и не оправдание использовать гарантировано дырявое ПО, тем более, если оно является платформой

Тут нет варианта отчасти, можно легко нагуглить какой-то оносительно простой эксплойт и успешно нанести урон бизнесу. Не знаю как вы, но для меня это на разу не оправдание. Там же и ОС, получается, соответствующая, с того времени, и веб-сервер, и прочее? Грустно это:(
Это не самый лучший пример в мире, но недавно вдруг обнаружилось (во время сбоя), что аэропорт во франции использует винду 3.11. Не поддерживаемую и очевидно дырявую.

Тут нет варианта отчасти, можно легко нагуглить какой-то оносительно простой эксплойт и успешно нанести урон бизнесу. Не знаю как вы, но для меня это на разу не оправдание. Там же и ОС, получается, соответствующая, с того времени, и веб-сервер, и прочее? Грустно это:(
Вы сами придумали какой-то странный сценарий и сами же его разгромили.
Вебсервер, ось — свежие. Мускул — свежий. На сервере входящие коннекты вообще запрещены, кроме как по ssh по ключам.
А разве при переходе на 5.2 или 5.3 у вас что-то сломается? 5-ка по-моему с 4-кой отличной совместимостью обладает.
Производительность нужна.

PHP5.4 работает насколько я помню пошустрее PHP4 (в зависимости от задачи и реализации), при гораздно больших возможностях писать поддерживаемый код.
Всё-таки не стоит называть скалярные тайпхинты строгой типизацией.
Конечно не стоит.
Строгой типизацией стоит называть режим строгой типизации который можно включить php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration.strict
И я думаю SamDark именно его и имел ввиду.
Просто не нужно затягивать переходы, 7 не должна сильно ломать код написанный на том же 5.5 или 5.6, а адаптация ради более высокой производительности стоит своего времени.
Особенно в этот раз. Производительность не просто немного подняли…
НЛО прилетело и опубликовало эту надпись здесь
Судя по вашим коментариям, вы не стоите тех денег которые указаны у вас в профиле.
Так нам же не за комментарии платят:)
учитывая предыдущие циклы, придется год его ждать как минимум…
В предыдущих циклах покрытие тестами было значительно хуже. Сегфолты к релизу по большей части пофиксили. Остальные уйдут в 7.0.1.
Какими же печеньками вам приходится держать разработчиков под php4? Если бы мне на собеседовании сказали мы используем php4, я бы поблагодарил за встречу и удалил телефон рекрутера
Прекрасная новость. Давно жду стабильного релиза.
А кто-нибудь знает где почитать по поводу PECL-расширений? Как там у них с семеркой. Лично для меня это основной вопрос — без некоторых из них не представляю вообще жизнь проекта.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Анонимный класс можно наследовать от анонимного класса?
Надо попробовать :)
А как вы это себе представляете?)

Кстати что забавно — года два назад на девконфе во время докалда по php-ng я поинтересовался не собираются ли запилить анонимные классы — тогда мне ответили что нет смысла делать из php вторую java =)
нет смысла делать из php вторую java


ну сам zend инвестировать в эту фичу не хотел, появилось RFC + PR. Опенсурс же.
Может быть присваивать описание класса в переменную и ими манипулировать? =) Сейчас это скорее одноразовые классы нежели анонимные. Для функций ведь сделали closures. Надо для классов что-то подобное.
Может быть присваивать описание класса в переменную и ими манипулировать?

Ну как бы, тип вы новый не объявляете таким образом (анонимность же), а стало быть вы не сможете этот класс реюзать. По сути вы можете представить что анонимные классы это final классы.

Для функций ведь сделали closures

И это очень хороший пример различия между именованными классами и безымянными. Безымянные должны быть использованы только единыжды, это class expressions (как анонимные функции являются function expressions). То есть анонимные функции вы так же должны использовать только единыжды (а не имитировать ими именованные функции).

Наследование никак не в писывается в концепцию «одноразовости».
НЛО прилетело и опубликовало эту надпись здесь
хостингам просто не выгодно, много проектов будет на < 7 версии, а это значит пока 70-80% клиентов не запросят 7 хостинг и не сдвинется с места.
Выгода для хостингов есть в уменьшении нагрузки на сервере при переходе на PHP 7. Но, конечно, хостер никогда не может заранее знать, не отвалится ли у какого-нибудь клиента старый проект, поэтому просто так взять и перевести всех на PHP 7 не получится. Многие хостеры уже давно предлагали в панели переключатель версий PHP, надеюсь и PHP 7 туда подтянут, благо этот релиз хорошо распиарен, запрос в массах есть, даже среди wp разработчиков.
НЛО прилетело и опубликовало эту надпись здесь
большинство хостингов дороже какого-нибудь дешевого облачного инстанса — там можно что угодно делать
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
На мой взгляд в описанной ситуации виноваты вы как исполнитель:
а) Не смогли объяснить заказчику зачем вам нужен доступ. Простой аргумент: из кода пхп который он потом зальёт на этот хостинг можно будет натворить дел похлеще чем с простым доступом по фтп/сфтп…
б) Даже если всё таки не даёт доступ — выяснить в какой среде будет работать ваш код и (желательно) это утвердить в ТЗ, если оно конечно есть. Если не знает или не хочет узнавать что там и как — попросить загрузить файл с phpinfo() и прочим.
в) Работать без ТЗ — вообще не комильфо. Это геморой как для вас так и для заказчика (очень редко случается когда всё проходит гладко).
г) (опционально) Рассказать о преимуществах таких простых вещей как «дроплет на DO за 5 баксов/месяц» и «ssl/https ещё за 5 баксов/год». Может быть вам лично на это всё пофиг, но вашей карме от этого точно хуже не станет :)
НЛО прилетело и опубликовало эту надпись здесь
Не понимаю как так у вас связан «фриланс» и некое «тут». Для меня фриланс это в первую очередь интернет. Если уж мы тут с вами переписываемся, значит интернет у вас есть :). Следовательно можно сделать вывод что у вас есть доступ до фриланс-бирж типа местного http://freelansim.ru/… Так зачем тогда «нужен сайт, бюджет 5 рублей» если можно нормально работать? Я что-то упускаю?
НЛО прилетело и опубликовало эту надпись здесь
Ну то есть тогда не «выбирать особо не приходится», а как-то вроде «я придумал себе свой фриланс, а потому —
в данном случае я виноват, раз работаю с таким Г-ом
НЛО прилетело и опубликовало эту надпись здесь
Не надо так переживать, я просто пытаюсь помочь.
Давайте прямо по списку:
1) квалификация и опыт это да, чем больше тем лучше, но вполне можно «набить руку» попутно нормально зарабатывая. Если ничего не делать так и навык не появится, так в любой работе.
2) время на работу? ну да, время на работу у меня ничем не занято, разве что работой.
3) портфолио — как не было так и нет, и наверное уже не будет…
4) место физического расположения — см. комментарий выше, не понятно как это связано. Да было бы удобно если бы это был какой-нибудь крупный город, но не критично.
5) финансовая обеспеченность опять же не понятно зачем нужна. Если вы тут пишите — значит есть с чего писать, есть интернет и есть свободное время чтоб переписываться в комментариях (к вопросу о пункте 2).
6) чувство собственной важности — необходимый в работе фрилансера инструмент, чтоб когда всё-таки докажут что «ты дно» идти и учиться, а иначе лень :)
7) про вменяемых заказчиков я писал в комментарии выше, пункт в. Чаще всего попадаются не самые лучшие представители рода человеческого :)
Удачи!
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
APCu еще не доделали, режим обратной совместимости отваливается. На запуск 5.6 проекта на 7RC ушло пару часов включая сборку, настройку и борьбу с изменениями. Самое коварное — изменение про то, как обрабатываются переменные переменные. Запись $this->$store['key'] в семерке считается как $this->{$store}['key'], а было — $this->{$store['key']}. И есть библиотеки, которые на это полагались.
НЛО прилетело и опубликовало эту надпись здесь
Ну, Doctrine1 например, в трёх местах :)
Александр, а пробовали Yii под этим запускать?

Я просто на ночь глядя попробовал поднять(завелось влет, одно место в коде поправить пришлось) и несколько недоумеваю: в простом синтентическом тесте — есть прирост в скорости, но вот сам yii (что первый что второй) показывает очень большое падение скорости — раза в 2.

Возможно у нас в проекте что-то лишнее есть, но я уж попробовал совсем все собственное отключить, оставив почти пустую страницу — получил еще большее падение, раз в 10. Конфиги и код, одинаковые. БД не влияет совсем

yadi.sk/i/ryRUbfxGktfa8 — yii2 на 5.5.9 — 14 мс
yadi.sk/i/4QK3FliqktfaQ — yii2 на 7.0.1 — 199 мс

yadi.sk/i/CZ9L7vWgktfbN — yii1 на 5.5.9 — 0.05с
yadi.sk/i/imjZjhMtktfc3 — yii1 на 7.0.1 — 0.29с

да и по памяти в обоих случаях хуже. Возможно это у меня проблемы с проектом, или php нормально не настроил. Вопрос один — вы yii пробовали под ним заводить? должно стать быстрее?
Присоединяюсь к вопросу.
Проверьте, включен ли кеш опкода.
Вы правы, дело в этом было.
Мне почему-то казалось что в php7 opcache не является extension'ом

После включения — php7 быстрее. на приведенных тестах (где только ядро загружается) разницы практически нет. а вот на реальных страницах — примерно в 1.5 раза
Пробовал. Про OpCache уже ответили.

Вообще меня немного удивило, что семёрка не дала самому фреймворку очень большого прироста производительности. Видно, у нас и так всё неплохо было :)
А у вас есть цифры по разнице 7 и 5 в yii? какая разница должна быть при оптимальных установках и т.п.
Нормальных цифр нет. Гонял на локальной машине. Много чего могло повлиять. Надо как-нибудь взять чистенький инстанс среднего размера на DigitalOcean и сделать нормальный тест.
профит от PHP7 заметно проявляется когда надо работать со структурами данных, много инстанцирования объектов, графы и т.д. Насколько я помню код Yii там всего этого… и нет почти. А вот штукам типа Doctrine2 с его unit-of-work это должно сильно помочь, но у меня руки не доходят погонять бенчмарки.
Это да. Надо ещё погонять, но если это действительно так, можно, наконец, типизировать конфиги. Конечно, это не подойдёт для любителей yaml, но направление занятное.
Переходить стоит, т.к. авторы PHPNG в своих докладах чаще сравнивают производительность не с предыдущими версиями PHP, а HHVM. Т.е. прирост производительности на некоторых задачах может быть существенным.
Rasmus в своем твиттере написал, что если не будет глобальных страшных багов, то семерка выйдет 3 декабря.
И это будет именно этот тегнутый релиз.
Phalcon + php7 = мейнстри́м в ближайшее время )
Пока еще Phalcon мейнстримом стать не может. Быстрым да. Но массовым пока еще нет. И станет ли тоже под вопросом.
А чего не станет? Прекрасный фреймворк, с которым приятно работать. А производительность идет скорее приятным бонусом.
Зефир.
А что зефир? Я сколько с фалконом работаю, мне не приходилось с ним работать. В том смысле, что не было необходимости, а не потому что я про зефир не знаю. То есть зефир отдельно, фалкон как фреймворк отдельно. (И да я в курсе что 2 версия фалкона на зефире написана)
НЛО прилетело и опубликовало эту надпись здесь
Рано или поздно натыкаешься на баг, который надо пофиксить край вчера потому что он в продакшне. Надеяться на команду фреймворка уже некогда. С PHP фреймворками тут всё просто: воспроизвёл локально, пробежался XDebug-ом, поправил, влил на сервер, отправил pull-request в upstream.

С фальконом так не выйдет.
Может я что не понимаю, но почему с фальконом не выйдет? Только из-за того что одного XDebug может оказаться недостаточно?
Ну да. Радость учить ещё один язык, делать билд и дебажить через strace не все хотят познать.
Как будто бы дебажить PHP через strace не приходилось. Но в целом я согласен, фалькон вносит дополнительные риски. Сегодня ты радуешься что у тебя все быстро работаешь а завтра нанимаешь Сишника.
Какого сишника, исходники в зефире на гитабе — идите и смотрите логику.
Синтаксис — тот же пэхапэ.
Или вы все еще на 1.3?
Или вы все еще на 1.3?

я не использую фалькон и не вижу в нем смысла. Мне проще узкие места переписать на golang а проблему с оверхэдом бутстрапинга фреймворка невилировать решениями типа php-pm.

И таки зефир не решает проблему дебага. Сишника нанимать придется потому что нанять php-ника который шарит в gdb выйдет сильно проблематично (банально меньше таких), а зефирка всеравно сначала транспайлится в Си.
Мы про дебаг.
strace поможет только при дебаге наружу, к системе.
Отнаследоваться от бажного класса и запилить свой метод поверх бажного. Не всегда применимо конечно, но возможно же.
Это вариация спартанского дебага через var_dump. Возможно, но в сравнении с XDebug, очень неудобно.
А кто говорит, что плохой? Мне тоже нравиться. Массовым (т.е. мейстримом) ему не светит стать ближайших лет 5. А может быть и никогда. И дело не во фрейворке, а в людях. Массам сложно уловить концепт. Лучшие практики тоже пока не очень наработаны, имхо. Скажем так, он инфраструктурно сыроват.

Вот если команда будет вести разъяснительную деятельность, то да, шансы есть. Сравниваю на примере Yii. А так… он так и останется уделом небольшой группы энтузиастов (которые его умееют готовить) и гиков.
Повторюсь, я не имел ввиду сейчас.
Массовость значительно возросла в последне время, все будет, ждемс )
Разъяснительные работы тоже едутся, ищите видео с конференций.
Не, ну больше народу будет однозначно. Фреймворк достойный. Работы тоже отлично ведутся. Сергей Яковлев — хороший докладчик.
Массовым уже становится, а про мейнстрим я же написал — в ближайшее время, а не сейчас.
Я все свои проекты перевел и новые на нем ввожу, нет пока на горизонте конкурентов, да если и будут то портирвоанные версии, если сделают автоматический конвертер в зефирную версию.

Сайты на Wordpress можно безболезненно переводить?
Сам Wordpress вроде да. Плагины — не факт.
Используем yii1 в работе.На продакшене еще не тестировали, но на сервере разработки прирост производительности около 25%. Выигрыш по памяти около 80-90%. Все цифры конечно примерные, но показывают общую картину.
Да, забыл отметить, что сравнивали семерку с 5.6 веткой. У нас 5.6 прибавил в скорости по сравнению с 5.4 около 10%.
Уже переходим, причём с 5.3
Вот только сегодня делал сборку с гита. На входе 7.1.0, всё собралось без единого каприза, чекинстал, деплой, всё работает. По сравнению с предыдущими версиями намного ( это минимум 20-30%% ) выросла производительность.
Async/await мы, видимо, дождемся еще только годика через два. Хотя уже вон и JS и даже Python подтянулись. А ведь это новая the big thing в веб-программировании.
новая the big thing в веб-программировании


это синтаксический сахар над промисами с использованием генераторов, по сути. В c# эта штука есть уже давольно таки давно.

В целом в php вы с версии 5.5 можете использовать корутины, есть даже отдельные библиотеки, которые демонстрируют нам то же что и async/await (лишь с небольшими ограничениями и чуть более сложной семантикой). Примерно так же работают полифилы для js.

Занимательно то, что подобные идеи были описаны еще для PHP6, но что-то пошло не так. В целом рекомендую почитать эту дискуссию из php internals что бы примерно понять на каком мы свете относительно async/await.
это синтаксический сахар над промисами с использованием генераторов

Нет. И нежелание осознавать это отличие может привести язык к большой беде (проигрыш в конкуренции с другими языками).

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

Концепция генераторов — это «выпихивание» наружу некоторых значений с сохранением контекста (понятна 90% программистов) и концепция «впихивани» данных обратно (понятна уже только 10% из них — все IMHO, естественно).

Концепция промисов — это концепция отложенных вычислений.

В то же время, async/await — это концепция «выпрыгивания наружу, когда хочется заблокироваться» и «впрыгивания внутрь, когда можно разблокироваться». Это впрыгивание и выпрыгивание контролируется не столько программистом, сколько планировщиком (довольно сложным). Более того, async/await — это также концепция для объединения несколких однотипных операций в пачки для последующей их «пачечной» обработки. Да, с точки зрения кода интерпретатора там переиспользуется код для генераторов (в части сохранения контекста и «впрыгивания») и способ работы с промисами, но с точки зрения программиста-пользователя все это оказывается за кадром (точно так же, как ассемблер остается за кадром для большинства си-программистов). Также async/await (на уровне пользователя) понятен с первого же раза 100% программистов — они просто начинают писать код в новом стиле, не задумываясь, как он работает «под капотом».
Протестировал на одном из своих проектов, к сожалению, PHP 7.0.0 не показал повышения производительности, есть даже небольшое падение.

Отключил memcached, прогнал на главной странице (анонсы всех разделов сайта, порядка 80 тяжелых запросов с сортировкой ~ 50 000 записей в бд)

Потребление памяти значительно снизилось:

PHP 5.6.1 — 2.411mb
PHP 7.0.0 — 1.301mb

А вот время исполнения незначительно ухудшилось:

PHP 5.6.1 — 0.98560s.
PHP 7.0.0 — 0.99667s.

Посмотрел профили XDebug, удалось выяснить некоторые причины.

— mysqli на PHP 7.0.0 работает немного медленее (практически все функции)
— md5 работает значительно медленее
— функции по работе со строками немного просели
и т.д.



Таблица с примерами времени исполнения:

Притом падение наблюдается если PHP пришел из реп (в моем случае OpenSuse)
Если запускать скрипты в официальных образах docker, падения производительности нет.
PHP 7.0.0 не показал повышения производительности


opcache включен?
И включал и выключал. Результаты схожи. Всего скорее плохая сборка в репо.
самый простой вариант — сравнить phpinfo варианта в контейнере и варианта из репозитория. Так же не стоит забывать что по дефолту в докер контейнере нет xdebug а он сильно влияет на производительность.
XDebug был отключен до профилирования, время схоже.
Под конец просто тестировал 3000000 md5 в cli. В докер контейнере результат PHP 5.6.1 cхожий с докер 7.0.0 и 5.6.1 из suse репозитория. А вот PHP 7.0.0 из репо отстает 20с против 5с, явно собрали с разными флагами.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации