Страницы 1
https://habrahabr.ru/blogs/php/136800/
Хочу обсудить этот массовый пиздец
Ну начнем с самого начала
Примеси
Ключевая новинка 5.4 — примеси. Они послужат в PHP заменой мультинаследования. Каждая примесь задается отдельным «классом» через ключевое слово trait. Внутри примеси могут быть определены методы, которые станут доступны в классе, к которому будут подключены примеси. Подключение примесей происходит с помощью языковой конструкции use. Имена примесей задаются через запятую и все их методы становятся доступны внутри класса.
Их уже обсудили и доказали полную несостоятельность в PHP здесь - https://stoplinux.org.ru/forum/viewtopic.php?id=2111
Нативная поддержка Юникода
Да-да. Больше не придется использовать расширения, вроде multibyte и ему подобных. Все строковые функции отлично понимают юникод.
Представьте! Языку уже восемнадцать лет! А он до сих пор где-то на уровне сырой беты. Только сейчас в PHP появился юникод! Это есть уже везде, в Ruby, Perl, Python, .NET, Java! Но в PHP только сейчас! Вы только представьте, толком ни одно существующее решение на PHP не может обрабатывать строки с юникодом.
Array dereferencing support
Данная возможность — краеугольный камень для многих PHP разработчиков. Как часто нам нужно дернуть нулевой индекс у метода, который возвращает массив? Насколько сильно бесит то, что эту вроде бы простую операцию приходится записывать в две строки, да еще и переменную создавать? Теперь страдать больше не придется:
function foo() { return array(1, 2, 3); } echo foo()[0]; // 1
А это вообще тупые костыли, это есть в руби еще с самого его появления.
Short syntax for arrays
В PHP 5.4 теперь доступна короткая запись массива, без ключевого слова array.
// Раньше приходилось писать так: $array = array(1, 2, 3); // Теперь можно так: $array = [1, 2, 3]; // И даже так: $array = ['first' => 1, 'second' => 2];
А это вообще! Ради этого стоило выпустить новую мажорную версию.
Встроенный веб-сервер
Отныне, вместе с дистрибутивом PHP будет поставляться встроенный веб-сервер, предназначенный исключительно для разработки. Его можно будет запустить из консоли и повесить на какой-нибудь порт:
php -S localhost:8000
PHP еще не умеет многопоточность, зато есть встроенный вебсервер. Нет слов!
Upload progress
Несмотря на то, что в HTML 5 File API реализован механизм отслеживания процесса загрузки файла на сервер (размер загруженной части отдает сам браузер), в PHP 5.4 появится дополнительный источник мониторинга состояния загрузки. Он будет храниться в сессии пользователя в ключе, например, upload_progress_myform и мы в любой момент сможем дернуть его Ajax'ом для захвата мира отрисовки прогресс-бара.
Офигеть как круто! В любом нормальном языке подобное можно реализовать созданием нового потока и просто проверять размер файла. Опять нет слов!
Вызов метода или свойства класса выражением
Еще одно приятное нововведение, которое поможет нам сэкономить строчку кода. Для того, чтобы вызвать свойство или метод класса, не нужно будет больше запоминать его в отдельную переменную.
class A { public static function foo_bar() { return '123'; } } $foo = 'foo'; $bar = 'bar'; echo A::{$foo . '_' . $bar}(); // 123
Опять же! К примеру руби, в котором есть офигенные фичи метапрограммирования, подобное можно было сделать еще 100 лет назад.
Scalar type hints
PHP явно идет в сторону строгой типизации. Раньше для автоматической проверки типа в аргументах метода можно было указывать только массивы и имена классов. Теперь такая возможность распространяется на некоторые другие типы: int, float и boolean.
function foo(int $a, bool $b) { return true; }
Ну и какой профит от этого? Опять же, если я попытаюсь сложить строку с числом, мне PHP опять ничего не скажет?
Улучшена производительность @
Оператор @ служит в PHP для отключения вывода ошибок на текущей строке кода. Раньше в высоко нагруженных приложениях использовать @ было невозможно из-за довольно ощутимых тормозов. Поэтому лично я ее больше не использую нигде.
В конце-концов приглушать ошибки — это странно. Ошибки нужно исправлять или ловить Exceptions.
У меня просто нету слов, одни эмоции! Приглушивать ошибки! Нет, это просто УЖАС!
Кроме того из PHP наконец-то выпилены register_globals, long_arrays и прочие директивы, заждавшиеся удаления.
Отлично! Вот юзеры хостингов будут довольны, что теперь 99% рабочих решений перестанут быть совместимы с минорным обновлением.
Неактивен
Ну ты суров чувак!
Большинство замечаний справедливо.
Однако ж:
В любом нормальном языке подобное можно реализовать созданием нового потока и просто проверять размер файла.
пехапе выполняется на сервере, а сервер принимает поток. что он с ним дальше будет делать - бааальшой вопрос, может и файла-то из него не создаст, а в БД запишет.
если я попытаюсь сложить строку с числом, мне PHP опять ничего не скажет?
Это вообще распространенный недостаток интерпретаторов, у них ниша такая. В JavaScript, к примеру, тоже можно.
Приглушивать ошибки! Нет, это просто УЖАС!
Это ж веб. Ошибка выводится прямо на веб-страницу. не надо юзера зря пугать, пусть ошибки обрабатываются как-то по-другому. надо дать возможность.
"Фу бля, крохобор вонючий" (с) Svart Testare
Неактивен
пехапе выполняется на сервере, а сервер принимает поток. что он с ним дальше будет делать - бааальшой вопрос, может и файла-то из него не создаст, а в БД запишет.
Получается, что PHP не может использовать потенциал многопроцессорных систем, зачем он тогда нужен? Как делать хайлоад?
Это вообще распространенный недостаток интерпретаторов, у них ниша такая. В JavaScript, к примеру, тоже можно.
В Ruby строгая динамическая типизация, строгая типизация на корню решает проблему выстрела себе в ногу с ошибками тип данных.
Это ж веб. Ошибка выводится прямо на веб-страницу. не надо юзера зря пугать, пусть ошибки обрабатываются как-то по-другому. надо дать возможность.
Это же дебильноватый PHP, в рельсах сделали принципиально другой подход к ошибкам.
Неактивен
Хайлоад, слово нынче модное? А ничгео ,что часто код там вообще не паралелят? В принципе.
Не паралелят не потому, что ненужно, а потому, что - нельзя . Это тоже самое, почему на линуксе нету нормальных игр, не потому, что они не нужны, а потому, что средства типа директх отсутствуют, есть, конечно оупенгл, но где ваш оупенгл?
Ну да. А в пхп и яваскрипте не так, и что? Во первых с любой динамической типизацией все равно можно нарватся на ошибки в рантайме.
Я уже говорил о полной несостоятельности нестрогой типизации на версусит, почти все со мной согласились, а вот ошибки в рантаймме - да, беда, это - правда.
Строгая типизация - оверхед.
Нестрогая типизация - оверхед, корявая и глючная недоделанная фича.
Ок, ну и где ваши рельсы?
https://rubyonrails.org/applications
Да где угодно!
Неактивен
Это как так? Поподробнее пожалуйста.
Нестрогая типизация - не нужна, это просто издевательство над программистом.
Большие проекты я имел в виду. Хайлоад ваш любимый.
Я тебе ссылку дал, самые популярные сайты, которые написаны на рельсах.
И все-то вы знаете. Проекты с какой нагрузкой вы строили?
И все-то вы не знаете, вам что-то не нравится?
Неактивен
Получается, что PHP не может использовать потенциал многопроцессорных систем, зачем он тогда нужен? Как делать хайлоад?
А по чем тут это? скрипт пхп запускается сервером, он же создаёт потоков сколько ему нужно и сам раскидает по процессорам. Конечно, в самому пхп тоже неплохо бы многопоточность иметь, раньше я как-то об этом не задумывался.
В Ruby строгая динамическая типизация
Я же сказал - распространенный, а не присущий всегда.
в рельсах сделали принципиально другой подход к ошибкам.
Озвучь в двух словах, и куда будет отправлено сообщение в случае ошибки когда ruby выполняется для генерации веба.
"Фу бля, крохобор вонючий" (с) Svart Testare
Неактивен
Страницы 1