PHP 5.6.0 alpha1

    Команда разработчиков PHP объявила о начале цикла выпусков PHP 5.6.0.

    Некоторые нововведения:


    • Отладчик phpdbg
    • Повторное использование php://input
    • Загрузка файлов больше 2Гб
    • Добавлен алгоритм хеширования gost-crypto
    • Улучшение SSL/TLS, В OpenSSL добавлена функция openssl_x509_fingerprint.
    • Скалярные выражения в константах
    • Изменяемое число аргументов функции


    Скалярные выражения в константах

    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = 'The value of '.THREE.' is 3';
    


    Изменяемое число аргументов функции

    function f($req, $opt = null, ...$params) {
        // $params is an array containing the remaining arguments.
        printf('$req: %d; $opt: %d; number of params: %d'."\n",
               $req, $opt, count($params));
    }
    


    Оператор use теперь поддерживает переменные и функции

    use const Name\Space\FOO;
    use function Name\Space\f;
    


    Следующий альфа релиз запланирован на 6 февраля.

    страница загрузки
    список изменений
    бинарные файлы для windows
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 95
    • +17
      PHP, ты порой умеешь удивлять…
      • 0
        честно говоря я ждал вот такого.

        @echoName()
        function getName () {… }
      • –55
        К шестой версии таки подберутся по мощности функционала и качеству к питону и руби
        • +11
          PHP это другое.
          • –15
            PHP — это современный perl, perl в свое время тоже имел не лучшую репутацию!
          • +26
            Начинается…
            • +21
              Критиковать PHP может только PHPшник ;)
              • –6
                видимо не подберутся :)
                • –16
                  Сорта говна. Что php, что python, что ruby.
                  • +7
                    а что сейчас норм, а то я опять отстал?
                    • –5
                      Зависит от задачи. Где-то может идеально подойти любой из вышеперечисленных.
                    • +6
                      эт вы хорошо, не точечным ударом, а по всему сектору прошлись
                  • +28
                    Улучшение SSL/TLS, В OpenSSL добавлена функция проверки отпечатка пальца.
                    fingerprints — это не совсем отпечаток пальца)
                    • +15
                      Даже выглядит же абсурдно. Зачем в PHP функционал для проверки отпечатков пальцев? Куда вы этот палец будете прикладывать? К монитору?)
                      Могли бы хоть погуглили «openssl fingerprint» перед тем как запостить новость)
                    • +1
                      Интересно, почему многоточие, а не звёздочка, например.
                      • +1
                        Небольшая аргументация есть в одном из двух RFC, затрагивающих эту тему: wiki.php.net/rfc/variadics#choice_of_syntax
                        • 0
                          Хм. Вроде разумно. Посмотрим, насколько удобным окажется.
                      • –17
                        Не могу даже представить чем руководились, принимая такой синтаксис:

                        function f($req, $opt = null, ...$params) {
                        • +27
                          синтаксисом других языков?
                          • –1
                            На самом деле интересно. В Java тоже многоточие после имени типа, в Scala — звездочка после типа переменной, в питоне звездочка перед имененем переменной. Больше всего похоже на Java, т.к. типа в PHP нет (кроме подсказки имени класса).
                            • –1
                              В ruby тоже звездочка перед именем переменной, в Котлине — ключевое слово vararg, в Dart — нет встроенной поддержки (http://stackoverflow.com/questions/13731631/creating-function-with-variable-number-of-arguments-or-parameters-in-dart).
                              • 0
                                Си для PHP важнее, это же очевидно :)
                                А там как раз многоточие. Ну и значит мой комментарий был не совсем точен, так как первым делом пошел смотреть как все это устроено в Java и Си. в Scala, подумал, аналогично яве должно быть.

                                // Я больше не буду злоупотреблять смайликами в комментариях на «Хабре»
                            • –24
                              «Духом PHP», очевидно. Неужели это первая синтаксическая особенность, которая вас смутила за время знакомства с PHP?
                              • –3
                                нет конечно :)
                                Правда если вообще не смотреть на другие языки то многое кажется логичным
                              • +9
                                Ну в Си/Си++ такой синтаксис для списка аргументов, много где еще так же. А как бы вы хотели?
                                • –2
                                  например
                                  function f($req, $opt = null, *$params) {
                                • 0
                                  С трепетом вспоминаю как придумывал костыль для этого.
                                • +3
                                  а где обещанные именованные параметры?
                                  • 0
                                    А кто обещал? Еще вроде бы обсуждают только: wiki.php.net/rfc/named_params
                                    • 0
                                      Я до сих пор не понял, почему каждый второй ноет про именованные параметры. Почему бы ассоциативный массив не передавать? Можете прояснить?
                                      • +11
                                        ну наверное потому что при таком подходе не работает автокомплит…
                                        • –5
                                          а без IDE программист уже не в состоянии программировать?
                                          • +10
                                            При всех недостатках IDE зачастую увеличивает скорость при сохранении качества.
                                            • +8
                                              Если есть инструмент хоть немного ускоряющий время разработки — то почему бы его не использовать? А при коммерческой разработке сокращение временных издержек это хорошо.
                                              • –5
                                                Я верно неправильно выразился. Я только обеими руками ЗА использование средств автоматизации, но программист должен что-то и ручками делать.
                                                • +1
                                                  Ну бывает нужно код и в mcedit быстро подредактировать, это понятно. Но это не значит что нужно ориентироваться на такой тип разработки в целом и если есть возможность улучшить поддержку языка в IDE без каких либо потерь, почему бы этого не сделать. Без IDE вам все равно без разницы, будет тоже самое что и ассоциативный массив передавать (да и его вам использовать не запрещают), а тем кто пишет в IDE станет удобнее.
                                                  • +5
                                                    я согласен. признаюсь, был не прав
                                              • +6
                                                Профессиональный программист — не умеет. Принципиально.
                                                Задача программиста — обеспечить производительность своей работы и последующей поддержки (через качество).
                                                Без статического анализа это очень сильно осложнится.

                                                А вот говнокодер и в блокноте набросает.
                                                • +1
                                                  Мне казалось, что наоборот, — профессиональный говнокодер без IDE писать не состоянии. Мне например наоборот мешает, когда IDE за меня решает где ставить скобки и так далее. Понятно, что всё это можно настроить. Но лично я печатаю в слепую и довольно быстро, так что вот эта автоподстановка скобок и др. не сильно уж облегчают разработку, да и названия функций в PHP (я имею ввиду из коробки) не настолько длинные, чтобы каждый раз юзать автокомплит. Да и вообще названия функций не должны состоять более чем из трёх лексических единиц.
                                                  • +2
                                                    Говнокодеру IDE не сильно нужна — он не умеет пользоваться половиной ее функций.

                                                    Мне например наоборот мешает, когда IDE за меня решает где ставить скобки и так далее.
                                                    У меня не расставляет, а лишь проверяет. И помечает неправильный стиль как ошибку.

                                                    да и названия функций в PHP (я имею ввиду из коробки) не настолько длинные, чтобы каждый раз юзать автокомплит.
                                                    Ну-ну :) А названия методов в малознакомых вам классах ваш мозг из Интернета подкачивает минуя компьютер?
                                                    • +3
                                                      Наверно вы просто не хотите научиться всем функциям мощной IDE, например, PhpStorm — горячая клавиша Ctrl+N — поиск класса и сразу переход к файлу этого класса. Или Ctrl+F12 — навигация по методам класса и поиск методов. Все это очень удобно и позволяет сократить время для рутинных действий при разработке, обходиться вообще без мышки.
                                                      • +1
                                                        настройка coding style при работе в команде — это важно. Исключает варианты при которых какой-нибудь вася пупкин будет комитить изменения в каком-то своем coding style. Ваши же доводы по поводу «слепой печати» более чем странны, только если для вас при слепой печати вы не закрываете глаза или смотрите куда-то но не на монитор.

                                                        по поводу автокомплита — вы либо не использовали сторонние библиотеки/фреймворки, либо вообще имеете мало опыта в написании больших проектов. Автокомплит позволяет избавить разработчика от необходимости держать в голове всю api всех компонентов проекта. Ну и опять же есть где-то две трети функций самого php, к которым если и нужно обращаться, то довольно редко, и тут автокомплит позволяет быстро вспомнить что там где, и какие аргументы оно принимает. Это быстрый способ обращения к документации, если хотите.
                                                • 0
                                                  Потому что сктриктово.
                                                  • +1
                                                    Ну нельзя например type hint использовать
                                                    • +2
                                                      Потому что из объявления функции в этом случае не понятно, что туда можно передать.
                                                  • 0
                                                    Дэбагер надо будет посмотреть)
                                                    • 0
                                                      Как-то не впечатляют изменения, ожидал большего от 5.6…
                                                      • +9
                                                        А по-моему круто, что новые версии PHP стали выходить регулярно и довольно часто к тому же. Пусть изменений немного и они нереволюционные, зато на регулярной основе.
                                                        • +2
                                                          Кроме того, не каждый кинется обновлять на самую свежую версию вотпрямща, а когда на два шага назад, уже как-то неприлично. Тогда получается, что при относительно небольших, но частых, порциях нового полезного функционала больше шансов, что он «уйдёт в массы» побыстрее.
                                                          • 0
                                                            Именно, учитывая еще и то, что для 2х поколений назад просто перестанут выходить обновления безопасности.
                                                      • +1
                                                        Загрузка файлов больше 2Гб

                                                        Интересно, а нормальное получение размеров больших файлов (больше 2/4Гб) на 32-битном PHP уже сделали или все так же придется продолжать писать всякие извращения для этого?
                                                      • +5
                                                        Совсем не по теме, но у меня уже восьмой год в голове стоит вопрос: зачем все имена переменных в этом языке включают знак доллара?
                                                        • +8
                                                          потому что без бакса — это не переменная, а константа
                                                          • 0
                                                            Наследие перла вероятно
                                                            • +3
                                                              Изначально, насколько я помню, это было связано с ограничениями парсера языка (по сути парсер представлял собой ворах регулярок). Сейчас вроде как это дело на нормальный парсер перенесли с разбором в AST (во всяком случае это как-то проскакивало в rfc). Ну и влияние perl-а.
                                                              • 0
                                                                Не, аст там нет, парсер yacc используется, который на лету генерит ОП-ы, которые уже исполняются в екзекьюторе. Но многие бы хотели увидеть аст к 6-й версии, так что вероятно будет.
                                                                • 0
                                                                  Вот я помню что перед релизом 5.5 в rfc проскакивала информация, думал что уже заимплементили. Спасибо.
                                                              • +6
                                                                На данном этапе убрать символ $ уже не получится, т.к. поломается сильно обратная совместимость — Константы, вызов функций и new через меременную:

                                                                $func = 'cos';
                                                                $func(20);
                                                                
                                                                func = 'cos';
                                                                func(20); // что вызывать? func - это name или переменная?
                                                                


                                                                И таких ситуаций очень много.
                                                                • +14
                                                                  А я даже причин не вижу, чтобы что-то убирать. Мне всегда в PHP это наоборот нравилось, что даже беглым взглядом видно, где переменные, глаз цепляется за $
                                                                  • 0
                                                                    А еще это символ доллара $)) Да в этом есть как плюсы, так и минусы, думаю их поровну.
                                                                    • 0
                                                                      Нормальные IDE умеют подсвечивать пересенные, даже если они не отмечены баксами. Но «блокнотам с подсветкой» так удобнее парсить, да.
                                                                      • 0
                                                                        А у вас не бывает ситуаций, когда вы код не в IDE смотрите, совсем никогда? Я вообще-то не про парсинг редакторами говорил, а про просмотр кода человеком, при чем совершенно независимо от того подсвечено там что-то или нет.
                                                                        • 0
                                                                          Если мне нужно понять код, а не просто посмотреть или скопипастить строчку, то открываю IDE. Анализировать код без IDE худо, потому что часто нужно разбирать множество файлов из разных папок. А чтобы скопипастить строчку из известного кода, не то что подсветка переменных не нужна, но и вообще подсветка.
                                                                          • +1
                                                                            вот ей богу проблема со знаком доллара у переменных у меня лично бывает только тогда, когда переключаешься на большой срок (пару месяцев) на другой какой язык (у меня так были периоды когда большую часть времени я писал на javascript, c++, c#)
                                                                      • +1
                                                                        Если бы они сделали Named Function Epression и Function Declaration как в JS, проблем бы не было, но обратная совместимость покатится к чертям.

                                                                        Вообще идея переменная = свойство глобального объекта, а функция — его метод, сама по себе хороша и это доказывает множество языков. Если бы включили это в php, возможно, сам язык был бы привлекательнее.
                                                                        • +2
                                                                          И превратился бы в JS? По мне так PHP движется в сторону Java и Питона и поэтому это было бы не очень логично. Да и это бы превратило PHP в другой язык программирования.
                                                                          • 0
                                                                            И превратился бы в JS?

                                                                            Почему же.
                                                                            идея переменная = свойство глобального объекта, а функция — его метод

                                                                            это как раз подход python, js и ruby.

                                                                            я просто высказал мнение по поводу доллара. Мне кажется довольно таки правильным решением хранение функций внутри переменных сразу при объявлении и в python, кстати, переменные и функции без знаков.

                                                                            PHP имеет ряд приятных особенностей, но синтаксис и ООП в нем пока выглядят худо.
                                                                            • +4
                                                                              Это бы было правильным решением, если бы писался новый язык. На счет того, что худо выглядит ООП, может быть, но думаю это больше относится к php 4 версии. По мне основные недостатки php не в языке, а в несогласованности его рантайм библиотек, в некоторой магии.

                                                                              Возможно вам кажется синтаксис php не очень приятным из-за большого количества непрофессиональных разработчиков, которые программируют на нем.
                                                                              • 0
                                                                                Возможно вам кажется синтаксис php не очень приятным из-за большого количества непрофессиональных разработчиков, которые программируют на нем.

                                                                                Да нет, я тоже когда то был не ахти программистом и уж тем более php программистом (перешел на php с С++ и шарпа из за популярности на нашем рынке). И, если я сейчас сталкиваюсь (довольно часто) с некачественным кодом — я стараюсь уговорить заказчика дать задачу по улучшению и рефакторингу.

                                                                                Рассуждая про синтаксис я имею ввиду символ конкатенации строк, символ обращения к методу или свойству (->) и работа с массивом (=>). Слава богу в 5,4 ввели шорт синтакс для массива в виде квадратных скобок (как в python / js).

                                                                                На счет того, что худо выглядит ООП, может быть, но думаю это больше относится к php 4 версии

                                                                                ООП выглядит худо до сих пор. Я имею ввиду не модель создания своих классов, так как функционал изрядно пополнился неймспейсами, миксинами и так далее, я говорю про общую ООПшность языка. Если посмотреть на те же python / js / ruby — у них нет простых типов данных. Все, так или иначе является объектом и имеет ряд методов для работы с этим объектом. В js так вообще функция может являться объектом, а в замыканиях может храниться функция-объект, которая при вызове func() — сделает одно действие, а при вызове func().exec() — другое.
                                                                                • +3
                                                                                  Ну вот JS в качестве ООП-ного языка приводить не стоит. Прототипная модель очень спорная и даже Mozilla фактически это признала внедрив в новую версию языка классы. На счет ruby не знаю, на счет Python не уверен — если там до сих пор нет private и protected модификаторов, все сводится к фанатичным обсуждениям что это «не нужно», в JS их собственно пока тоже нет.

                                                                                  Все является объектом хорошо, но в JS это правило до конца не соблюдается как надо. Однако же я не сторонник перегрузки операторов для объектов, а если все объект их придется вводить.
                                                                                  • +1
                                                                                    Неоднородность синтаксиса это наследие былых лет, тут уж ничего не поделать. По сути серьезно воспринимать php можно только с 5.3+ версий.

                                                                                    По поводу ООП — там нету миксинов, там есть только трейты (в objective-c это называется категориями). По поводу того что есть скалярные типы данных, не могу сказать что это так уж и плохо. И прототипную модель наследования из js вы так же за зря приплели. Тут вы путаете концепцию наследования всех типов от object (например как это сделано в C#, где все типы наследуются от System.object). В python свои косяки с реализацией ООП оставшиеся с ранних версий (я про отсутствие модификаторов private/protected, явное указание контекста вызова через self и т.д. Не могу сказать что это такой уж идеал.).

                                                                                    как я уже говорил, большая часть проблем php — наследие былых времен. Решение использовать этот инструмент или нет — это только ваше решение. Не нравится — альтернативы есть. Недостатки есть везде, плохих программистов хватает на любой платформе, так что дискуссии на тему «что лучше» бессмысленны.
                                                                                    • +2
                                                                                      > В python свои косяки с реализацией ООП оставшиеся с ранних версий (я про отсутствие модификаторов private/protected, явное указание контекста вызова через self и т.д.

                                                                                      И явный self, и отсутствие private — это вполне себе by design, а не просто наследие старых версий.
                                                                                      • 0
                                                                                        По сути серьезно воспринимать php можно только с 5.3+ версий.

                                                                                        После 4, 5 тоже был очень хорош, проблема же была в том что после 5.2 развитие по сути остановилось на 4 года.
                                                                                        • 0
                                                                                          после 5.2 развитие по сути остановилось на 4 года.

                                                                                          У хостинг-площадок развитие тоже остановилось
                                                                                  • +1
                                                                                    Это подход Ruby и JS, но не Python. В последнем переменные (функции и классы — это тоже переменные) становятся атрибутами объекта модуля, в котором они декларированы, что не совсем то же самое.
                                                                                • 0
                                                                                  Кто вам мешает реализовать свой язык программирования?
                                                                                  • +1
                                                                                    еще один noname язык? лучше написать фреймворк над языком, да и на это нет времени. В данный момент я занят выбором инструмента для создания своих проектов (не от заказчиков) и PHP пока лучший кандидат в соотношении цена / качество / временные издержки. Но по завершении наверняка буду переводить проекты на python.
                                                                                    • 0
                                                                                      Попробуй Ruby ;)
                                                                                      • +1
                                                                                        обязательно попробую, но для меня сейчас это большие риски. Я пытался мельком посмотреть код на Ruby и понять его, но у меня не получилось так же быстро как и на Python разобрать, что же там написано.
                                                                                        • 0
                                                                                          Попробуйте Golang
                                                                                          • 0
                                                                                            Пытался, не пошло. Круче руби пока не видел языков.
                                                                                • +1
                                                                                  На js вон добровольно переменные, содержащие jquery-объекты, предваряют знаком доллара, а вам не нравится :))
                                                                                • –7
                                                                                  Еще больше хаоса в PHP, полезного и нужного!
                                                                                  Ура, вместо так необходимого php прямого управления памятью(чтобы делать ад php наполненный демонами) — мы получили снтакическую какашку из 100500 use, которая работает примерно также как перпроцессор в C, только это не он а лишь эмуляция!
                                                                                  Ура товарищи! Вперед к светлому будущему!
                                                                                  • +1
                                                                                    Сложно понять что в этом комменте язвление, а что нет. Кто вообще решил что пхп необходимо, а что нет?
                                                                                    • +1
                                                                                      Очевдно же, те кто ни на что, кроме как в комментах срать не способен.
                                                                                    • +2
                                                                                      прямого управления памятью

                                                                                      вы с ума сошли? прямое управление памятью? В интерпритируемом языке? Покажите мне хоть один язык с прямым управлением памятью работающий под виртуальной машиной?
                                                                                      • 0
                                                                                        С#
                                                                                        • 0
                                                                                          Раскройте свое утверждение. Насколько я помню в этом плане c# довольно ограничен и сделано это для более эффективной работы с нативными библиотеками.
                                                                                    • +1
                                                                                      А почему в обзоре упущена часть изменений, в том числе с deprecated нововведениями?
                                                                                      • 0
                                                                                        Хорошие нововведения, молодцы!
                                                                                        • 0
                                                                                          Я вас разочарую. Пока вы писали этот комментарий, они успели выпустить вторую бету :)
                                                                                          • +1
                                                                                            Третья альфа уже есть. Затем, я думаю, будет уже первая бета.
                                                                                            • 0
                                                                                              Ой, пардон, альфа. Опечатался.
                                                                                              На php.net нет никакой информации о третьей альфе. Последняя новость только про вторую.
                                                                                              • 0
                                                                                                В этой новости есть дата выхода третьей — 27 февраля, и для скачивания уже доступна. А вообще на гитхабе более актуальная информация всегда.

                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.