PHP-Дайджест № 57 – интересные новости, материалы и инструменты (9 – 22 февраля 2015)



    Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

    Приятного чтения!


    Новости и релизы




    PHP


    • must read RFC: Scalar Type Hints — Предложение по праву можно назвать самым спорным и обсуждаемым в истории PHP. Pascal Martin подробно описал суть предложения в своем посте. Также в поддержку предложения выступил Энтони Феррара, изложив аргументы за у себя в блоге. Тем не менее камнем преткновения стал вопрос строгости типизации и ряд справедливых контраргументов привели Расмус Лердорф в комментариях, Зеев Сураски в php.internals и многие другие.
      Голосование закончилось с результатом 67 за и 34 против, а значит, не хватило всего одного голоса для его принятия. В связи с этим автор предложения Andrea Faulds, объявила о том, что прекращает работу над PHP и отзывает свои RFC среди которых Scalar Type Hints, Spaceship/Combined Comparison Operator, Void Return Type, Big Integer Support. Несмотря на это, работу над предложением подхватили другие core-контрибьюторы, результатом чего стали предложения от Энтони Феррара — Scalar Type Hints v5 и от Зеева Сураски — RFC: Coercive Types for Function Arguments.
    • RFC: Combined Comparison (Spaceship) Operator — Предложение добавить оператор <=> хоть и было отозвано, но позже восстановлено, принято и влито в PHP 7.
    • RFC: Native Design by Contract support as definition — Предлагается реализовать в языке PHP возможности контрактного программирования. Также чуть ранее было аналогичное предложение, но с указанием контрактов в аннотациях.
    • RFC: Make empty() a Variadic — Предлагается добавить в функцию empty() возможность передавать любое число аргументов: if (empty($a, $b, $c)) {}.
    • RFC: Context Sensitive Lexer — Принятие этого предложения позволит использовать некоторые ключевые слова в качестве имен классов или методов.
    • RFC: In Operator — Предлагается добавить новый оператор in, который облегчит проверку на вхождение элемента в строку или массив: $contains = "foo" in ["foo", "bar"]; // true
    • RFC: Encapsulation — Предлагается реализовать инкапсуляцию классов, интерфейсов и трейтов на уровне пространств имен. Таким образом, класс, объявленный как приватный в неймспейсе, будет доступен только внутри этого неймспейса.
    • RFC: Sum Types — Начиная с версии 5.1 в PHP добавлена возможность явно указывать тип параметров, а в PHP 7 реализована поддержка указания типов возвращаемых значений. Предлагается добавить возможность указания нескольких типов для этих случаев, например:
      function (array|Traversable $in) {}


    Инструменты


    • Mondrian — Набор консольных утилит для статического анализа кода. Позволяет выявить и отрефакторить сильно связный код.
    • RegExpBuilder — Конструктор регулярных выражений.
    • wapmorgan/ServerStat — Утилита сбора информации (cpu, mem, swap) для мониторинга сервера.
    • Gatekeeper — Независимая от фреймворков библиотека, реализующая систему RBAC с юзерами, группами, правами.
    • PHPBU — PHP Backup Utility — Утилита для создания и синхронизации бэкапов БД и файлов.
    • phptrace — Расширение для трассировки PHP-скриптов и вывода стека вызовов.
    • MINI 2 — Скелет приложения на основе микрофреймворка Slim, предназначенный для быстрого прототипирования.
    • Pake — Make для PHP.
    • appserver.io — Многопоточный сервер приложения на PHP для PHP.
    • PHP Face Detection — Распознавание лиц на PHP.
    • Medio — Кодогенератор с использованием twig-шаблонов.
    • ePHP — Интерпретатор PHP на чистом Erlang.


    Материалы для обучения




    Занимательное




    Если вы заметили опечатку или ошибку, пожалуйста, напишите мне в личку!

    Прислать ссылку
    Быстрый поиск по всем дайджестам
    Предыдущий выпуск

    Zfort Group
    113,00
    Компания
    Поделиться публикацией

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

      0
      Голосование закончилось с результатом 67 за и 34 против, а значит, не хватило всего одного голоса для его принятия. В связи с этим автор предложения Andrea Faulds, объявила о том, что прекращает работу над PHP
      Прямо Rage Quit какой-то. Какой накал страстей. Жаль, что не приняли — отличная же затея. Только на Энтони вся надежда осталась, может его версию RFC доведут таки до релиза. С учётом ранее принятого RFC про типизацию возвращаемых значений получим почти полный комплект опциональной строгой типизации. И это прекрасно, я считаю. С удовольствием переберусь на PHP7 в продакшене, как только нужные расширения подтянутся (там же Extension API меняют, так что, видимо, придётся подождать некоторое время)
        +1
        На реддите последние две недели очень много писали на эту тему. В частности был еще предложение от Сары из фэйсбука, но вроде как товарисч Зив в весьма грубой форме попросил ее остановиться, мол его RFC лучше. Короче последние две недели php ветка рэддита бурлит ненавистью и непониманием действий zeev.
          +2
          ну в целом Расмус по делу написал почему RFC в таком виде принимать нельзя, и я думаю многие согласятся что нерабочий tan(2) это просто жесть.

          declare(strict_types=1) — зачем из php делать javascript? как это всё будет жить со сторонним кодом?!
            0
            многие согласятся что нерабочий tan(2) это просто жесть
            Я не очень в курсе, как у них там всё происходит. RFC либо принимают, либо нет, возможности внести правки не существует, надо подавать новый RFC? Просто автоконвертация на входе int во float это весьма логично, и без неё, конечно, типизация неюзабельна.
              0
              и я думаю многие согласятся что нерабочий tan(2) это просто жесть.


              а можно ссылку на эту часть дискуссии? Буду очень благодарен
              0
              1) Обсуждалось что если в стрикт режиме функция ожидает float и туда приходит int, то ничего страшного не должно происходить если не происходит потери данных при приведении типов.

              2) по умолчанию код в режиме weak тайп хинтинга, так что это не особо проблема.

              3) А что именно вас смущает? Уже тысячу раз говорилось что это все разруливается с вызывающей стороны. То есть если у вас сторонний код содержит функцию принимающую например строку, и файл в стрикт моде, то если ваш код написан в weak моде разницы для вас нет никакой. С точки зрения функции в сторонней библиотеке ей придет строка а не что-то другое (если конечно удается привести типы). А вызовы внутри этого стороннего кода уже будут строгими. Как по мне это нормальный компромис.

              У расмуса очень много аргументов сводится к примерам кода из wordpress. Причем пишется все так будто бы разработчики вордпресов будут во всю использовать вообще тайпхинтинг для скаляров.
              +1
              Вообще она писала в твиттере, что это не столько из-за разногласий, а сколько из-за собственных проблем. Хотя возможно это просто дипломатическая отмазка :) Источник — twitter.com/AndreaFaulds/status/567267887657021440
              +1
              Предлагается добавить возможность указания нескольких типов для этих случаев, например:
              function (array|Traversable $in) {}
              Это круто, конечно.
              Но конкретно в этом случае лучше бы включили array в Traversable и в ArrayAccess или отдельные псевдо-типы для этого сделали.
                0
                Вроде как от этой идеи отказались и крайне негативно восприняли.
                  –1
                  И правильно, не нужен еще один велосипед, всё давно решено через полиморфизм, который как раз будет очень кстати после принятия scalar type hints.
                    0
                    Это и есть полиморфизм.
                    Если я пишу:
                    function func($a) {
                    foreach ($a as $k => $v) {
                    //…
                    }
                    }
                    То мне всё равно, массив это или объект-итератор.
                    Сейчас нет возможности указать «я хочу здесь итератор и мне плевать, объект это или нативный массив».

                    Я уже не говорю о том, чтобы функции для работы с массивами могли объекты с нужными интерфейсами принимать.
                      0
                      Я говорил только про саму возможность указать несколько типов через "|". Насчет же массивов — их давно следовало переделать в объект, тогда и проблемы бы не было.
                        0
                        Но тогда это был бы уже не похапэ. Если оставаться в рамках того, что есть, то "|" всё-таки какое-никакое решение.
                          0
                          Кривое это решение. Но не думаю что раньше 8-ой веркии параметрический полиморфизм появится в пыхе. Что до «был бы уже не похапэ» — а может так будет лучше?
                +1
                А этот Hack крутой:
                — Constants are not supported except in classes and interfaces.
                — Global variables are not supported.
                — Superglobals don’t exist.
                — No non-xxx type can be converted implicitly to xxx. All other conversions must be explicit.
                Жаль, что в PHP 7 такие изменения даже и не думают вводить.
                Что-то мне подсказывает, что лет через 5 уже стабильный Hack может обогнать PHP по популярности среди новых проектов.

                > Голосование закончилось с результатом 67 за и 34 против
                2/3 (без двух уже человек) хотят развивать язык, а треть говорит «но ведь тогда мой старый скрипт из 2003 года не будет работать».
                  0
                  Голосование не закончилось, его отменили за пару дней до. И да, из тех кто голосовал против — большинству не нравилась возможность объявлять блоки с declare или же сам синтаксис для declare. В v0.5 этой RFC есть подробное описание что зачем и почему было выбрано — так что я надеюсь что многие из тех кто голосовали против передумают. Так же частенько люди не понимали как будет работать эта мешанина из модов и их это смущало. Кто-то просто не хочет видеть стрикт тайп хинтинг в php и мотивирует это фразами типа «всеравно это никто не будет использовать».
                    0
                    Ну и да, long term support версии hhvm поддерживаются по пол года. Для серьезных проектов. если вы не котрибьютер самой hhvm, это не серьезно.
                    +1
                    Как всегда — спасибо вам.
                      +1
                      Ну хоть в статье о PSR-7 упоминается Zend Framework. Ура!
                        +4
                        >> Доступно для покупки 3-е издание Zend PHP 5 Certification Study Guide

                        Кому надо?
                        0
                        А я так надеялся, что скалярные типы появятся в скором в PHP :(
                          +1
                          А они там есть. Причем с первых версий. Тайп хинтинга для них нет, это да.
                          0
                          А rfc по поддержке generics там не видно?

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

                          Самое читаемое