PHP 5.4 здесь; следующий важный шаг вперед после версии 5.3 — пока удерживать PHP 6 (полная поддержка Unicode). Последние усовершенствования значительно улучшают его элегантность, удаляя при этом устаревшую функциональность, что приводит к существенной оптимизации времени выполнения (увеличение скорости и использования памяти на 20%).

Новые функции и улучшения
Некоторые из ключевых новых функций включают в себя trait , сокращенный синтаксис array , встроенный веб-сервер для тестирования, использование $this в замыканиях, доступ к членам класса при создании экземпляра, <?= Всегда доступен и многое другое!
PHP 5.4.0 значительно повышает производительность, объем памяти и исправляет более 100 ошибок. Известные устаревшие / удаленные функции включают register_globals , magic_quotes (о времени) и safe_mode . Также стоит упомянуть тот факт, что поддержка многобайтовой поддержки включена по умолчанию, а default_charset был изменен с ISO-8859-1 на UTF-8.
Content-Type: text/html; charset=utf-8Content-Type: text/html; charset=utf-8всегда отправляется; поэтому нет необходимости устанавливать этот метатег HTML или отправлять дополнительные заголовки для совместимости с UTF-8.
Черты
Лучшая демонстрация черт — это когда несколько классов имеют одинаковую функциональность.
Черты (горизонтальное повторное использование / множественное наследование) представляют собой набор методов, которые структурно аналогичны class (но не могут быть созданы), которые могут позволить разработчикам свободно повторно использовать наборы методов в нескольких независимых классах. Поскольку PHP является единственным языком наследования, подкласс может наследовать только от одного суперкласса; вот где черты приходят, чтобы играть.
Лучшее использование признаков демонстрируется, когда несколько классов имеют одинаковую функциональность. Например, представьте, что мы создаем какой-то веб-сайт, и нам нужно использовать API Facebook и Twitter. Мы создаем два класса, которые, как правило, имеют функцию / метод-обертку cURL. Вместо выполнения классического копирования и вставки этого метода — который будет использоваться в двух классах — мы используем черты (копирование и вставка, стиль компилятора). Таким образом, мы создаем код многократного использования и следуем принципу СУХОЙ (не повторяй себя).
Вот пример:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/** cURL wrapper trait */
trait cURL
{
public function curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
}
/** Twitter API Class */
class Twitter_API
{
use cURL;
public function get($url)
{
return json_decode($this->curl(‘http://api.twitter.com/’.$url));
}
}
/** Facebook API Class */
class Facebook_API
{
use cURL;
public function get($url)
{
return json_decode($this->curl(‘http://graph.facebook.com/’.$url));
}
}
$facebook = new Facebook_API();
echo $facebook->get(‘500058753’)->name;
/** Now demonstrating the awesomeness of PHP 5.4 syntax */
echo (new Facebook_API)->get(‘500058753’)->name;
$foo = ‘get’;
echo (new Facebook_API)->$foo(‘500058753’)->name;
echo (new Twitter_API)->get(‘1/users/show.json?screen_name=rasmus’)->name;
// PS I’m not obsessed with Rasmus 🙂
|
Понял? Нет? Вот самый простой пример!
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
trait Net
{
public function net()
{
return ‘Net’;
}
}
trait Tuts
{
public function tuts()
{
return ‘Tuts’;
}
}
class NetTuts
{
use Net, Tuts;
public function plus()
{
return ‘+’;
}
}
$o = new NetTuts;
echo $o->net(), $o->tuts(), $o->plus();
echo (new NetTuts)->net(), (new NetTuts)->tuts(), (new NetTuts)->plus();
|
Если у вас есть какие-либо вопросы о чертах, пожалуйста, оставьте примечание в разделе комментариев ниже.
Важный совет: магическая константа для черт
__TRAIT__.
Встроенный CLI Web-сервер
В веб-разработке лучшим другом PHP является Apache HTTPD Server. Однако иногда может оказаться излишним настроить httpd.conf просто для его использования в среде разработки, когда вам действительно нужен крошечный веб-сервер, который можно запустить с помощью простой командной строки. К счастью, PHP 5,4 поставляется со встроенным веб-сервером CLI.
Веб-сервер PHP CLI предназначен только для разработки и не должен использоваться в производстве.
Примечание . Приведенные ниже инструкции относятся к среде Windows.
Шаг 1 — Создайте корневой каталог документов, файл маршрутизатора и индексный файл
Перейдите в корневой каталог жесткого диска (при условии C:\ ). Создайте каталог / папку с именем public_html . Создайте новый файл в этой папке и назовите его router.php . Скопируйте содержимое ниже и вставьте его в этот новый файл.
|
01
02
03
04
05
06
07
08
09
10
11
|
<?php
// router.php
if (preg_match(‘#\.php$#’, $_SERVER[‘REQUEST_URI’]))
{
require basename($_SERVER[‘REQUEST_URI’]);
}
else if (strpos($_SERVER[‘REQUEST_URI’], ‘.’) !== false)
{
return false;
}
?>
|
Теперь создайте еще один файл с именем index.php . Скопируйте содержимое ниже и сохраните файл.
|
1
2
3
4
|
<?php
// index.php
echo ‘Hello Nettuts+ Readers!’;
?>
|
Откройте файл php.ini (он находится в каталоге установки PHP — например, C:\php ).
Найдите настройки include_path (он находится на ~ 708-й строке). Добавьте C:\public_html в конец строки между кавычками, разделяя их точкой с запятой . Конечный результат должен выглядеть так:
|
1
|
include_path = «.;C:\php\PEAR;C:\public_html»
|
Сохраните и закройте файл. На следующем шаге.
Шаг 2 — Запустить веб-сервер
Откройте командную строку ( Windows + R , введите cmd , нажмите Enter ); вы должны увидеть что-то вроде этого, в зависимости от вашей версии Windows.
|
1
2
3
|
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\nettuts>
|
Измените ваш текущий каталог на установку PHP, следуя примеру ниже:
|
1
2
|
C:\Documents and Settings\nettuts>cd C:\php
C:\php>
|
Здесь начинается самая важная часть — запуск веб-сервера. Копирование …
|
1
|
php -S 0.0.0.0:8080 -t C:\public_html router.php
|
… и вставьте его в командную строку (щелкните правой кнопкой мыши, чтобы вставить, чтобы вставить). Нажмите Enter . Если все идет хорошо, вы должны увидеть нечто похожее на то, что показано ниже. Не закрывайте командную строку; если вы это сделаете, вы также выйдете из веб-сервера.
|
1
2
3
4
5
|
C:\php>php -S 0.0.0.0:8080 -t C:\public_html router.php
PHP 5.4.0 Development Server started at Fri Mar 02 09:36:40 2012
Listening on 0.0.0.0:8080
Document root is C:\public_html
Press Ctrl-C to quit.
|
Откройте http://localhost:8080/index.php в вашем браузере, и вы должны увидеть:
|
1
|
Hello Nettuts+ Readers!
|
Вуаля! Вот и все, счастливого кодирования!
Совет 1 : Создайте файл php-server.bat со следующим содержимым: C:\php\php -S 0.0.0.0:8080 -t C:\public_html router.php . Дважды щелкните по нему, и теперь сервер запущен!
Совет 2 : используйте 0.0.0.0 вместо localhost если вы ожидаете, что ваш сервер будет доступен из Интернета.
Более короткий синтаксис массива
PHP 5.4 предлагает новый более короткий синтаксис array :
|
01
02
03
04
05
06
07
08
09
10
|
$fruits = array(‘apples’, ‘oranges’, ‘bananas’);
// The same as Javascript’s literal array notation
$fruits = [‘apples’, ‘oranges’, ‘bananas’];
// associative array
$array = [
‘foo’ => ‘bar’,
‘bar’ => ‘foo’
];
|
Обратите внимание, что «старый» метод все еще используется и всегда будет. Это просто альтернатива.
Разыменование массива
Больше никаких временных переменных при работе с array s!
Давайте представим, что мы хотим получить отчество Алана Матисона Тьюринга:
|
1
|
echo explode(‘ ‘, ‘Alan Mathison Turing’)[1];
|
Сладкий; но это не всегда было так просто. До 5.4 мы должны были сделать:
|
1
2
|
$tmp = explode(‘ ‘, ‘Alan Mathison Turing’);
echo $tmp[1];
|
Теперь, что если мы хотим получить фамилию (последний элемент в array ):
|
1
|
echo end(explode(‘ ‘, ‘Alan Mathison Turing’));
|
Это работает нормально, однако, оно выдаст E_STRICT (строгие стандарты: только переменные должны передаваться по ссылке), поскольку она стала частью E_ALL в error_reporting .
Вот немного более сложный пример:
|
1
2
3
4
5
|
function foobar()
{
return [‘foo’ => [‘bar’ => ‘Hello’]];
}
echo foobar()[‘foo’][‘bar’];
|
$this в анонимных функциях

Теперь вы можете ссылаться на экземпляр объекта из анонимных функций (также называемых замыканиями ), используя $this .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Foo
{
function hello() {
echo ‘Hello Nettuts!’;
}
function anonymous()
{
return function() {
$this->hello();
};
}
}
class Bar
{
function __construct(Foo $o) // object of class Foo typehint
{
$x = $o->anonymous();
$x();
}
}
new Bar(new Foo);
|
Обратите внимание, что это может быть достигнуто до 5.4, но это было излишним.
|
1
2
3
4
5
6
7
|
function anonymous()
{
$that = $this;
return function() use ($that) {
$that->hello();
};
}
|
<?= всегда включен
Независимо от настройки php.ini , short_open_tag , <?= (Открывать теги PHP и echo) всегда будут доступны. Это означает, что теперь вы можете безопасно использовать:
|
1
|
<?=$title?>
|
… в ваших шаблонах вместо …
|
1
|
<?php echo $title ?>
|
Представление двоичного числа

Есть только 0b10 видов людей;
те, кто понимает двоичный код, и те, кто не понимает.
Отныне целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) записи, которой может предшествовать знак (- или +). Чтобы использовать восьмеричное обозначение, перед числом ставьте 0 (ноль). Чтобы использовать шестнадцатеричное обозначение, перед числом должно быть 0x. Чтобы использовать двоичную запись, перед числом введите 0b.
Пример: представление числа 31 (десятичное).
|
1
2
3
4
|
echo 0b11111;
echo 31;
echo 0x1f;
echo 037;
|
Callable Typehint

Набор текста предназначен для тех, кто хочет сделать PHP более типичным языком. Тип подсказки могут иметь только тип object и array начиная с PHP 5.1, и callable с PHP 5.4. Подсказка традиционного типа с использованием int и string еще не поддерживается.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
function my_function(callable $x)
{
return $x();
}
function my_callback_function(){return ‘Hello Nettuts!’;}
class Hello{static function hi(){return ‘Hello Nettuts!’;}}
class Hi{function hello(){return ‘Hello Nettuts!’;}}
echo my_function(function(){return ‘Hello Nettuts!’;});
echo my_function(‘my_callback_function’);
echo my_function([‘Hello’, ‘hi’]);
echo my_function([(new Hi), ‘hello’]);
|
Инициализированный высокоточный таймер
$_SERVER['REQUEST_TIME_FLOAT'] был добавлен с точностью до микросекунды (с плавающей запятой). Это полезно, когда вам нужно рассчитать время выполнения скрипта.
|
1
|
echo ‘Executed in ‘, round(microtime(true) — $_SERVER[‘REQUEST_TIME_FLOAT’], 2), ‘s’;
|
__destruct() (или Сводка)
В целом, PHP 5.4 предлагает множество улучшений. Теперь вам нужно получить свежую копию с php.net и создать качественный объектно-ориентированный PHP-код!
Как вы думаете, что принесет нам PHP 5.5 и чего вы ожидаете?