Ключевая новинка 5.4 — примеси. Они послужат в PHP заменой мультинаследования. Каждая примесь задается отдельным «классом» через ключевое слово trait. Внутри примеси могут быть определены методы, которые станут доступны в классе, к которому будут подключены примеси. Подключение примесей происходит с помощью языковой конструкции use. Имена примесей задаются через запятую и все их методы становятся доступны внутри класса.
Если имена методов класса и примесей совпадают, то приоритетным методом станет метод класса. К сожалению, в этом случае мы не получим даже Notice.
Примесь всегда имеет доступ к классу, к которому она подключена, через конструкцию parent.
class A {
public function foo() {
return 'foo';
}
}
trait B {
public function bar() {
return parent::foo() . ' bar';
}
}
class C extends A {
use B;
}
$c = new C();
echo $c->foo(); // foo
echo $c->bar(); // foo bar
Нативная поддержка Юникода
Да-да. Больше не придется использовать расширения, вроде multibyte и ему подобных. Все строковые функции отлично понимают юникод.
Свернутый текст
Вот тут-то все обрадуются !
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
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
Scalar type hints
PHP явно идет в сторону строгой типизации. Раньше для автоматической проверки типа в аргументах метода можно было указывать только массивы и имена классов. Теперь такая возможность распространяется на некоторые другие типы: int, float и boolean.
function foo(int $a, bool $b) {
return true;
}
Улучшена производительность @
Оператор @ служит в PHP для отключения вывода ошибок на текущей строке кода. Раньше в высоко нагруженных приложениях использовать @ было невозможно из-за довольно ощутимых тормозов. Поэтому лично я ее больше не использую нигде.
В конце-концов приглушать ошибки — это странно. Ошибки нужно исправлять или ловить Exceptions.
Deleted
Кроме того из PHP наконец-то выпилены register_globals, long_arrays и прочие директивы, заждавшиеся удаления.
Источник
Хабрахабр / Что нового в PHP 5.4 / из песочницы
Спустя 19 минут, 54 секунды (23.01.2012 - 13:10) Winston написал(а):
Цитата (RCuPeR @ 23.01.2012 - 11:51) |
Array dereferencing support |
Честно говоря не въехал...
Цитата (RCuPeR @ 23.01.2012 - 11:51) |
Short syntax for arrays |
Радует. На JS похоже
Спустя 5 минут, 10 секунд (23.01.2012 - 13:16) RCuPeR написал(а):
Цитата |
Честно говоря не въехал... |
Прошу прощения. Пропустил строчку.
Цитата |
Радует. На JS похоже |
Python, Ruby.
Спустя 4 минуты, 12 секунд (23.01.2012 - 13:20) Winston написал(а):
Цитата (RCuPeR @ 23.01.2012 - 12:16) |
Прошу прощения. Пропустил строчку. |
Теперь понятно
Спустя 55 минут, 19 секунд (23.01.2012 - 14:15) caballero написал(а):
можно было просто дать ссылку на Хабр и все
Спустя 5 минут, 31 секунда (23.01.2012 - 14:21) VolDroN написал(а):
Цитата |
Array dereferencing support, Scalar type hints, Short syntax for arrays |
оо.. наконец!
теперь ждём год пока обновятся хостинги и.т.п. и можно будет использовать всё это.
Спустя 8 минут, 50 секунд (23.01.2012 - 14:30) neadekvat написал(а):
Судя по тому, что еще на 5.3 не все перешли..
Спустя 29 минут, 59 секунд (23.01.2012 - 14:59) Эли4ка написал(а):
круто..интересно много багов и уязвимостей найдут или нет...
Спустя 1 час, 23 минуты, 20 секунд (23.01.2012 - 16:23) Winston написал(а):
Цитата (Эли4ка @ 23.01.2012 - 13:59) |
интересно много багов и уязвимостей найдут или нет... |
Спустя 1 час, 26 минут, 19 секунд (23.01.2012 - 17:49) inpost написал(а):
RCuPeR
А ты уверен, что ты правильно понял вопрос поддержки юникода?
Вот ты пишешь, что строковые функции сразу будут понимать ютф, то есть strlen будет возвращать не количество байт, а символов в ЮТФ? Мне кажется, ты попутал.
Я когда читал, я это понял так, что mbstring.internal_encoding будет автоматически в стандарте стоять UTF-8, а не то, что сейчас (ISO, кажется). То есть теперь не надо перенастраивать апач, чтобы функции mb_strlen правильно работали с самого начала.
Upload progress - до версии 5.4 догадаться не могли, что это практически на любом сайте было бы полезно!
А ты уверен, что ты правильно понял вопрос поддержки юникода?
Вот ты пишешь, что строковые функции сразу будут понимать ютф, то есть strlen будет возвращать не количество байт, а символов в ЮТФ? Мне кажется, ты попутал.
Я когда читал, я это понял так, что mbstring.internal_encoding будет автоматически в стандарте стоять UTF-8, а не то, что сейчас (ISO, кажется). То есть теперь не надо перенастраивать апач, чтобы функции mb_strlen правильно работали с самого начала.
Upload progress - до версии 5.4 догадаться не могли, что это практически на любом сайте было бы полезно!
Спустя 11 минут, 9 секунд (23.01.2012 - 18:00) caballero написал(а):
Цитата |
Я когда читал, я это понял так, что mbstring.internal_encoding будет автоматически в стандарте стоять UTF-8, а не то, что сейчас |
именно так
Цитата |
Upload progress |
гораздо проще была бы нормальная поддержка браузеоами чем пинать сервер чтобы показать это на клиенте
Спустя 5 минут, 48 секунд (23.01.2012 - 18:06) alex12060 написал(а):
Все так обрадовались этому, но опять-же, было бы хорошо объявить о том, что 5.4 должен был выйти 19 января 2012 года, хотя так и не вышел до сих пор. Что-ж, будем ждать
Спустя 1 минута, 43 секунды (23.01.2012 - 18:08) Игорь_Vasinsky написал(а):
Цитата |
https://bugs.php.net/search.php?boolean=0&l...=All&phpver=5.4 |
одни русско-именные баго-искатели
Спустя 15 минут, 41 секунда (23.01.2012 - 18:23) inpost написал(а):
caballero
Ну значит на хабре не-до-программист, который не понял смысла слов, или не смог их перевести адекватно
Я только не понял вот что, нафига аяксом дёргать параметры... клиент отправляет запрос на сервер, заливается файл, во время заливки файла на сервер ПОСТОЯННОЕ СОЕДИНЕНИЕ открыто. Что мешает этим же соединением и пользоваться, чтобы получать % загруженных данных. Ты предлагаешь перехватывать % "отправленных данных на сервер", но с таким же успехом этот же % может и сервер возвращать пуллингом, допустим каждую 1 сек о % полученных данных сервером.
Вместо этого они предлагают Аяксом дёргать сервер (отдельными соединениями) на проверку этих же загруженных данных. Мне кажется, что бред.
alex12060
Задержка говорит о качестве.
Ну значит на хабре не-до-программист, который не понял смысла слов, или не смог их перевести адекватно
Я только не понял вот что, нафига аяксом дёргать параметры... клиент отправляет запрос на сервер, заливается файл, во время заливки файла на сервер ПОСТОЯННОЕ СОЕДИНЕНИЕ открыто. Что мешает этим же соединением и пользоваться, чтобы получать % загруженных данных. Ты предлагаешь перехватывать % "отправленных данных на сервер", но с таким же успехом этот же % может и сервер возвращать пуллингом, допустим каждую 1 сек о % полученных данных сервером.
Вместо этого они предлагают Аяксом дёргать сервер (отдельными соединениями) на проверку этих же загруженных данных. Мне кажется, что бред.
alex12060
Задержка говорит о качестве.
Спустя 6 часов, 22 минуты, 2 секунды (24.01.2012 - 00:46) neadekvat написал(а):
Решил тут почитать кое-что. И нашел вот такую интересную вещь:
Цитата |
<?= is now always available regardless of the short_open_tag setting" |
Цитата |
<?= теперь доступно всегда, независимо от значения директивы short_open_tag. |
То есть, я так понимаю, убит последний (если не единственный) аргумент против подобного синтаксиса. Неужто обратно переучиваться - ведь так действительно удобнее. Может кто-нибудь представить аргумент против такой записи, который я упустил?
Спустя 24 минуты, 55 секунд (24.01.2012 - 01:10) inpost написал(а):
neadekvat
Всё классно, теперь можно использовать с чистой совестью Хоть и удобно, но сложно будет переучиться.
Всё классно, теперь можно использовать с чистой совестью Хоть и удобно, но сложно будет переучиться.
Спустя 3 минуты, 15 секунд (24.01.2012 - 01:14) neadekvat написал(а):
Сначала надо дождаться выхода и распространения по хостерам. К тому же, это, кажется, RC, т.е. ждать еще чутка дольше.
Спустя 2 минуты, 56 секунд (24.01.2012 - 01:17) inpost написал(а):
neadekvat
Но это будет в 100 раз быстрее, чем HTML 5
Но это будет в 100 раз быстрее, чем HTML 5
Спустя 8 минут, 29 секунд (24.01.2012 - 01:25) UnWind написал(а):
Мде... Конечно радостно за то, что register_globas выпнули.
за php сервер более менее (Хотя и раньше все устраивало).
Ну и за классы... Остальное на мой взгляд - бредятина...
Я ожидал чего то более существенного и логичного в новой версии.
за php сервер более менее (Хотя и раньше все устраивало).
Ну и за классы... Остальное на мой взгляд - бредятина...
Я ожидал чего то более существенного и логичного в новой версии.
Спустя 4 минуты, 25 секунд (24.01.2012 - 01:30) neadekvat написал(а):
Цитата (UnWind @ 24.01.2012 - 02:25) |
Остальное на мой взгляд - бредятина |
Например?
Спустя 59 минут, 25 секунд (24.01.2012 - 02:29) Invis1ble написал(а):
ждем 2020-го года и начинаем писАть под 5.4
_____________
Гнусный социопат с комплексом Бога.