Статьи

PHP 5.4 здесь! Что ты должен знать

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-8 Content-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__ .


В веб-разработке лучшим другом PHP является Apache HTTPD Server. Однако иногда может оказаться излишним настроить httpd.conf просто для его использования в среде разработки, когда вам действительно нужен крошечный веб-сервер, который можно запустить с помощью простой командной строки. К счастью, PHP 5,4 поставляется со встроенным веб-сервером CLI.

Веб-сервер PHP CLI предназначен только для разработки и не должен использоваться в производстве.

Примечание . Приведенные ниже инструкции относятся к среде Windows.

Перейдите в корневой каталог жесткого диска (при условии 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»

Сохраните и закройте файл. На следующем шаге.

Откройте командную строку ( 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 .

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 ?>

бинарный php

Есть только 0b10 видов людей;
те, кто понимает двоичный код, и те, кто не понимает.

Отныне целые числа могут быть указаны в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8) или двоичной (основание 2) записи, которой может предшествовать знак (- или +). Чтобы использовать восьмеричное обозначение, перед числом ставьте 0 (ноль). Чтобы использовать шестнадцатеричное обозначение, перед числом должно быть 0x. Чтобы использовать двоичную запись, перед числом введите 0b.

Пример: представление числа 31 (десятичное).

1
2
3
4
echo 0b11111;
echo 31;
echo 0x1f;
echo 037;

Wuts DAT

Набор текста предназначен для тех, кто хочет сделать 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’;

В целом, PHP 5.4 предлагает множество улучшений. Теперь вам нужно получить свежую копию с php.net и создать качественный объектно-ориентированный PHP-код!

Как вы думаете, что принесет нам PHP 5.5 и чего вы ожидаете?