Пользователь
0,0
рейтинг
24 января 2014 в 16:06

Разработка → PHP 5.6.0 alpha1

PHP*
Команда разработчиков 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
Роман @sefus
карма
32,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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 уже сделали или все так же придется продолжать писать всякие извращения для этого?
    • +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 февраля, и для скачивания уже доступна. А вообще на гитхабе более актуальная информация всегда.

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