Официально представлен (http://php.net/index.php#id2016-12-01-3) релиз языка программирования PHP 7.1 (http://php.net/). Новая ветка отличающейся значительной порцией новых возможностей (http://php.net/manual/en/migration71.new-features.php) и наличием изменений (http://php.net/manual/en/migration71.incompatible.php), нарушающих совместимость.
Ключевые улучшения (http://php.net/manual/en/migration71.php) в PHP 7.1:- Возможность (https://wiki.php.net/rfc/nullable_types) использования типов, которые могут принимать значение null. Для пометки таких типов применяется знак вопроса, например, определив функцию "function f(?callable $p) {}" её можно вызвать с аргументом, имеющим значение null;
- Добавлен (https://wiki.php.net/rfc/void_return_type) тип возвращаемого значения void, указывающий на то, что функция не вернула значение;- Добавлен псевдо-тип iterable, позволяющий определять параметры функций, которые могут принимать значения различных перечисляемых типов, допустимых для перебора в цикле, таких как массивы и объекты Traversable;
- При указании смещения внутри строки теперь можно указывать (https://wiki.php.net/rfc/negative-string-offsets) отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт "e";
- Добавлен (https://wiki.php.net/rfc/list_keys) вариант конструкции list(), в которой могут задаваться ключи. Например: "list(1 => $oneBit, 2 => $twoBit, 3 => $threeBit) = $powersOfTwo";
- Добавлено (https://wiki.php.net/rfc/short_list_syntax) выражение "[] =", которое выступает альтернативой конструкции "list() =". Например, вместо "list($a, $b, $c) = array(1, 2, 3)" теперь можно указать "[$a, $b, $c] = [1, 2, 3]";- Реализована (https://wiki.php.net/rfc/invalid_strings_in_arithmetic) система вывода ошибок и предупреждений в случае использования в математических выражениях строк, не преобразуемых в число. Например, "10 apples" + "5 pears" приведёт к выводу ошибки "Notice: A non well formed numeric string encountered in example.php on line 3", а 5 * "orange" к "Warning: A non-numeric string encountered in example.php on line 3";
- Возможность (https://wiki.php.net/rfc/multiple-catch) обработки нескольких типов исключений в одном выражении catch;
- Поддержка (https://wiki.php.net/rfc/class_const_visibility) определения видимости для констант внутри класса. Константы теперь могут определяться с флагами public, private и protected;
- Поддержка асинхронной обработки сигналов (https://wiki.php.net/rfc/async_signals) в ext/pcntl и поддержка дополнительного контекста (https://wiki.php.net/rfc/additional-context-in-pcntl-signal-...) в обработчике pcntl_signal.URL: http://php.net/index.php#id2016-12-01-3
Новость: https://www.opennet.ru/opennews/art.shtml?num=45604
я один считаю, что ломать совместимость с минорной версии как-то неприлично, и стоило запилить новую ветку?
Им бы новый язык стоило запилить, столько от 5-ки отличий в 7-ке.
С тех пор, как вместо полумертвого php6 вышел php 5.4 (который по сути шестерка без сдохшей попытки внедрения юникода, и обратно несовместимых изменений там были тонны), инкремент второй циферки можно считать мажорной версией, а первая увеличивается только по особо крупным поводам. В postgresql примерно так же, кстати.
То есть, если у кого то номер версии сущий рендом - это правильно, и давайте продолжать этот мусорник, потому что вон у тех такой же мусорник, и ок.
не рандом, просто не соответсвует semver. своя логика есть.
> который по сути шестерка без сдохшей попытки внедрения юникодаА вот в чём проблема с внедрением Юникода? При том, что вроде как его уже много лет назад внедрили в виде отдельного модуля (который стоит практически у всех) и при том, что используют Unicode уже давно практически вообще все?
Согласен. Более того PHP 7 - это уже совсем другой язык, не php. Они поменяли основополагающие принципы. Это всё равно что Python превратить в с++ и назвать его Python 4.0. Это абсолютно неправильно и им следовало дать этому языку другое название и развивать отдельно.
Он стал многопоточным и строго типизированным?
Вы наверно не в курсе, но да. И обратная совместимость потеряна у многих функций и операторов. По сути необходима полная переписка всего кода на этот новый язык. От родного php там мало чего рабочего осталось. Из Людмилы Гурченко 1973 года стало то, что сегодня (гуглить: "Людмила Гурченко в 1973 году и 2009 году")
такое ощущение что подобную чушь о каких-то несовместимостях пишут имбициллы которые о pecl не слышали и до сих пор пользуются mysql_*, либо вообще люди к php отношения не имеющие.
А можно огласить весь список основополагающих принципов и указать какие именно и как поменяли? А то я кроме добавления необязательной(то есть старый код продолжит работать) строгой типизации ничего основополагающего не помню. Да и режим strict для типов умудрились сделать чисто по пыховски - включается только целиком на файл. Считаю главный основополагающий принцип пыха - делать всё через жопу - не изменили.
учатся у гномосеков
> я один считаю, что ломать совместимость с минорной версии как-то неприлично, и
> стоило запилить новую ветку?Пока в Debian stable не попало не так принципиально :)
А дебианщики, не будь дураки, как обычно сделают несколько пакетов: php5, php6 и php7. :)
Особенно php6
Уже :)
Более того, ничто не мешает делать пакеты php71 или вообще php7чегонибудьеще, так было с php5 в сторонних репах.
Вон что люди творят! А зато python до сих пор ругают из-за не совместимости второй и третьей версии.
python не менял курс на 90 градусов...
> python не менял курс на 90 градусов...Python изначально был почти правильно спроектирован!
php эклектичен с самого начала
мой код одинаково работает на 5.4 и 7.1, что я делаю не так?
У меня тоже хелоу ворлд работает ставильно на всех версиях
Вангану что это не минорный релиз
А на хабре вчера релиз ждали, даже статью про блеск и нищету PHP выпустили про развитие PHP вплоть до версии 7.1
https://habrahabr.ru/post/316506/
Судя по дате релиза, релиз таки был вчера
> Судя по дате релиза, релиз таки был вчераКогда у нас сегодня, в америке ещё вчера. Объявление релиза было сегодня в два ночи по MSK.
>> Судя по дате релиза, релиз таки был вчера
> Когда у нас сегодня, в америке ещё вчера. Объявление релиза было сегодня
> в два ночи по MSK.Объясняю на пальцах): Я знаю, что релиз kernel 4.9 будет 12 декабря, но статью могу написать об основных изменениях и нововведениях уже сегодня, ибо гоняю тест ветку уже с RC3.
PS писать не буду - чукча читатель)
>>> Судя по дате релиза, релиз таки был вчера
>> Когда у нас сегодня, в америке ещё вчера. Объявление релиза было сегодня
>> в два ночи по MSK.
> Объясняю на пальцах): Я знаю, что релиз kernel 4.9 будет 12 декабря,
> но статью могу написать об основных изменениях и нововведениях уже сегодня,
> ибо гоняю тест ветку уже с RC3.
> PS писать не буду - чукча читатель)Чукча ошибся) - 11-го)
Как-то сильно поверхностно там описано.
Более подробная ретроспектива:
PHP 7.0 https://www.opennet.ru/opennews/art.shtml?num=43449
PHP 5.6 https://www.opennet.ru/opennews/art.shtml?num=40480
PHP 5.5 https://www.opennet.ru/opennews/art.shtml?num=37239
PHP 5.4 https://www.opennet.ru/opennews/art.shtml?num=33241
PHP 5.3 https://www.opennet.ru/opennews/art.shtml?num=22392
PHP 5.2 https://www.opennet.ru/opennews/art.shtml?num=8678
PHP 5.1 https://www.opennet.ru/opennews/art.shtml?num=6495
PHP 5.0 https://www.opennet.ru/opennews/art.shtml?num=4113
rip HHVM
Накатил из ppa:ondrej/php, будем потыкать.
там RC6 еще
"При указании смещения внутри строки теперь можно указывать отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт "e"
Наконец-то! В Питоне это давно реализовано.
На самом деле, без мультибайтовости не сильно нужно.
> На самом деле, без мультибайтовости не сильно нужно.Угощайтесь своим уникодом. В UTF операцию "N символов с конца строки" нормально не реализовать.
>> На самом деле, без мультибайтовости не сильно нужно.
> Угощайтесь своим уникодом. В UTF операцию "N символов с конца строки" нормально
> не реализовать.Я бы скорее сказал «эффективно».
Что по твоему "нормально"? В О(1) операций? Не реализовать в О(1), и что с того?Зачем гоняться за производительностью операции, которая никак не влияет на общую производительность какой-либо программы?
> Что по твоему "нормально"? В О(1) операций?Да
> Не реализовать в О(1), и что с того?
Можно использовать mb_substr(), и что с того?
> В Питоне это давно реализовано.Ну ты и сравнил. В python-е много чего давно реализовано, в том числе и юникод.
К 12 версии станет почти как Perl5
Совсем мертвым что ли?
К этому всё и идёт.
Консистентности перла как языка пхп не достигнет никогда.Для этого надо минимум дропнуть легаси, а на это оне пойтить не могут - тогда пхп загнётся. Глобалы сколько корчевали - но так и не удалили до конца. С mysql_* - то же самое.
Разработчики к 7-й версии обнаружили что смогут и void реализовать... к 8-ке откажутся от процедурной части и сделают полностью функциональным, а в 9-ке обрубят костыли объектной парадигмы и уберут system(). Вангую дальше, потом они подумают о легковесных потоках и мир получит erlang v.0.9per-alpha но с такой тяжелой и дурной наследственностью, что поймут всю тщетность попыток и самораспустятся.
Посему, смысла продлевать конвульсии этого монстро-образного уродца на гусеничном ходу с крыльями бабочки и аппетитом слона - "Hypertext Preprocessor" для домашних страничек, наш тайный комитет не видит и считает своим долгом сфокусироваться на Go.
Держите нас в курсе.
На лоре писали, что мерсен твистер в релиз по ошибке закоммитили, посмеялся.
пхп медленно превращается яву, отвратительно.
он и так отвратителен, без превращений
Отвратительный язык делает отвратительные повороты, вполне кондиция
но мне этот уродец мил. Если бы я хотел писать на яве, то так бы сразу и поступил.
> пхп медленно превращается яву, отвратительно.PHP никогда не был нормальным веб языком программирования. Почему спросите вы, да потому что в него добавляют все что нужно и не нужно, дабы нравится большинству так сказать. Но сколько какаху сахаром не посыпай она конфетой не станет. Вообще плохая мысль сравнивать PHP и Java это языки разного назначения, PHP вне веба ничего не может, да и не должен так как это только Hypertext Preprocessor, а вот Java может куда больше.
> PHP вне веба ничего не может$ php -e 'echo "может\n";'
можетШах и мат.
> Шах и мат.Полностью согласен - если пытаться писать что-то покрупнее привета миру на php вне веба, то только мат и остается.
> Полностью согласен - если пытаться писать что-то покрупнее привета миру на php
> вне веба, то только мат и остается.У нас в конторе есть дядька преклонных лет, который на нём автотесты написал. Тонны автотестов на php. Мы желаем ему долгих лет жизни. :)
хипстота на js написала бы и считала это очень крутым?
Что за глупости. PHP - это язык, инструмент, а что на нём пишут и как - это дело самих программистов и ниши, на которую этот инструмент нацелен (в данном случае - web). Плохому танцору, как говорится, всё мешает.
Кроме того, это интерпретируемый язык. Это значит, что есть файл с кодом, описывающим какие-то алгоритмы с синтаксисом php, и есть интерпретатор, который этот код считывает, проверяет и исполняет, и как вы этому интерпретатору будете передавать код и где будет находится этот код и интерпретатор - абсолютно неважно. Поэтому глупо говорить "вне веба ничего не может" - это вы не можете, а он - может.
>> пхп медленно превращается яву, отвратительно.
> PHP никогда не был нормальным веб языком программирования. Почему спросите вы, да
> потому что в него добавляют все что нужно и не нужно,
> дабы нравится большинству так сказать. Но сколько какаху сахаром не посыпай
> она конфетой не станет. Вообще плохая мысль сравнивать PHP и Java
> это языки разного назначения, PHP вне веба ничего не может, да
> и не должен так как это только Hypertext Preprocessor, а вот
> Java может куда больше.восстановление Википедии из дампа в mysql запускается так:
php importDump.php < dumpfile.xml
Ты забыл сказать сколько дней оно будет выполнятся и сколько памяти при этом сожрёт.
Раньше порога вхождения по сути не было, садишься и пишешь по манам без всяких знаний. Теперь порог вхождения выше, чем у с++. И все сбегаются и кудахтают как это круто. Ну и сделали бы отдельный язык. А для несогласных оставили бы всё как есть.
Пользуй старые версии PHP или тебя насильно заставляют? Консерваторы должны страдать, а продукты развиваться, пускай даже методом проб и ошибок...
Строгая типизация -это не развитие, это смена свойства языка. Т.е. язык не развился, а стал другим,. Не путайте пожалуйста. Развитие - это расширение синтаксиса и введение нового функционала. Они же все сломали.
У вас что по дефолту строгая типизация врубилась?
> Теперь порог вхождения выше, чем у с++.Спешу расстроить, вы ничего не знаете о с++.
Если они уже поломали многое из версии 5.x, по сути вещи, за которые я любил этот язык, то что будет дальше? Как им доверять после этого? Это стремление из уникального языка сделать клон какого-то другого мне абсолютно не понятно.
Можно список за что любил?Каптча 30006 как бы намекает.
Так что поломали вам так любимое?
А то анончики в коментах раскричались что поломали, но что-то не признаются что тут такого кардинального поломали.
http://itcraftsman.pl/php-7-1-kolejne-zmiany-i-nowosci/
> http://itcraftsman.pl/php-7-1-kolejne-zmiany-i-nowosci/
Что хуже?random_int() и random_bytes()
mt_rand() и mt_srand()
random_* крипостойкий генерато рандом
mt_* повышенная случайность, но не для криптографии.
Мне нравится что у него производительность гораздо выше чем у пхп 5, но то что они постоянно что то выводят и делают операторы недействительными, меня накаляет. Однажды я помню у нас так после обновления сайт не смог открыть базюку, потому что видетели теперь mysql не годится, нужно mysqli
>> теперь mysql не годится, нужно mysqlimysql давным давно не годится.
mysqli не годится по причине корявого api. PDO наше все.
после твоего ника и аватара - задумался про PDO.
...и учти, что в похапе это не панацея :-)https://stackoverflow.com/questions/134099/are-pdo-prepared-...
> mysqli не годится по причине корявого apiНе всё ли равно, если почти всегда работа с базой всё равно скрывается каким-нибудь Doctrine/Propel, имеющим свой api?
Если поверх стоит прослойка в виде Doctrine/Propel, то конечно все равно. Mysqli дает больше возможностей для работы с mysql, нежели PDO. Его проблему корявого api прослойка скроет.
> Однажды я помню у нас так после обновления
> сайт не смог открыть базюку, потому что видетели теперь mysql не
> годится, нужно mysqliОбновить мажорную версию на продакшене без предварительного тестирования? Всегда так делаю!
О подтянулись слоупоки которые не вкурсе что mysql_* уже давно deprecated был ещё в 5 версии.
Сайт был не особо важным, а ПХП я в то время не знал от слова совсем.
> О подтянулись слоупоки которые не вкурсе что mysql_* уже давно deprecated был
> ещё в 5 версии.А кто вам сказал что это было недавно? Это происходило в момент обновления 5ой версии около года назад.
> "function f(?callable $p) {}" её можно вызвать с аргументом null - "f(null)";А это они поломали? Или это просто сахар?
> function f(callable $p = null) {}
Представьте если бы с++ так менялся. Каждые пол года тонны нового и нерабочего кода. Чтобы получить обновление безопасности, надо переписывать весь написанный за долгие годы код на, по сути, новый язык. Такое поведение разработчиков php говорит об их нестабильности и ненадежности. Любой написанный сегодня код завтра будет объявлен не поддерживаемым новым интерпретатором, а после завтра в старом интерпретаторе будет обнаружена дыра, которую уже не закроют. При таком раскладе заказывать разработку сайтов на данным языке опасно для бизнеса.
Современный веб весь так развивается. Полурабочие CSS4, HTML6, наполовину поддерживаемые браузерами но уже целиком используемые верстальщиками. Каждые полгода появление нового javascript-фреймворка и объявление устаревшим всех старых (только jquery каким-то чудом держится, но некоторые уже и его считают дедушкой). Вот и серверсайд подтянулся.
некоторые уже и его считают дедушкой
Эти некоторые просто не любят конкуренцию. Еще бы - каждая обезьяна знает jquery, а это плохо для доходов. Пока еще на brainfuck не форсят, но это пока.
> Значения, возвращаемые функцией с типом void, при попытке их использования в коде будут интерпретироваться как null, без вывода предупреждения;Мне кажется или это запредельное дерьмо?
> Мне кажется или это запредельное дерьмо?Зря минусуете человека.
Сейчас они так сделали, потом в каком-нибудь 7.4 сделают ворнинг, если эта возможность используется, потом в 7.6 объявят это deprecated, и в конце концов в 8.3 удалят поддержку.
Весь этот дебилизм с ===, in_array(..., ..., true) и полурабочими функциями поиска (из-за того, что возвращают false, хотя логичнее было бы null) - из-за абсолютной недальновидности. Люди просто не видят на два шага вперёд и не понимают, чем обернётся их костыль в плане дальнейшей поддержки.
Вы вот смеётесь над битриксом, а они просто физически одно время не могли выкинуть код совместимости со всякими php4 из-за таких вот устареваний, из-за того, что авторы php сначала реализовали как-нибудь, потом выяснили, что получилось криво и решили переделать, а потом снова переделали, но уже нормально.
>> если эта возможность используется, <<Если у кого-то используется возможность:
int i = fnSome();
void fnSomoe() { };
это не проблема языка.просто попытка борьбы с простыми опечатками.
удалённые mysql_, mcrypt_ в коде php4 легко лечатся написанием собственных функций, с использованием аналогов mysqli_, openssl_ внутри.
совковый mbstring? лучше на питоне писать или go
пхп отлично развивается
https://wiki.php.net/rfc/consistent_function_names
ага без CamelCase, дегенераты...
Верблюдам не сообщили, что исследования показали процентов на 20 лучшую читаемость some_cool_func, чем someCoolFunc? Так что дегенераты отнюдь не те, кто отказался от верблюжьего стиля.
Там речь не о camel case, а об исправлении неконсистентности. Сейчас, например, htmlspecialchars, но html_entity_decode. Или str_replace, но strtr. Предлагается добавить алиасы, приводящие все к одному виду.
Смотри внимательно, на что был ответом мой комментарий.
Пока некоторые хейтят (и будут хейтить). Интел, как и другие, вообще не парится. Ибо software.intel.com/en-us/blogs/2015/10/27/high-performance-php-7