Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > PHP5.3


Автор: Serkys 15.3.2008, 11:46
Выставляю на суд общественности свою заметку про грядущий PHP5.3

Доброго времени суток.

На конференции http://www.php.net/cal.php?id=3028 была показана презентация, рассказывающая о новых возможностях и отличиях PHP5.3. Сейчас я расскажу вам про некоторые изменения, подробнее вы сможете ознакомиться с ними просмотрев http://ilia.ws/files/phpquebec_php53.pdf.

Основные изменения направлены на исправление багов, безпроблемную работу старого кода и развитие существующего функционала.
Также были добавлены пространства имён (namespace). Следующий пример из презентации иллюстрирует их использование.
Код в старом стиле:
Код

function MY_wrapper() {}
class MY_DB { }
define('MY_CONN_STR', '');

MY_wrapper();
new MY_DB();
MY_CONN_STR;


А вот с использованием namespace:
Код

namespace MY;
function wrapper() {}
class DB { }
const CONN_STR = '';

use MY AS MY;
wrapper();
new DB();
CONN_STR;


Другие изменения:
  •  md5() работает приблезительно на 15% быстрее
  •  Масса улучшений в движке
  •  Константы перемещены в read-only область памяти
  •  Усовершенствована обработка исключений (exceptions)
  •  Добавлена магическая константа __DIR__, хранящая в себе директорию, в которой расположен выполняющийся скрипт
  •  Добавлена возможность быстрого присваивания значения по умолчанию при помощи оператора ?: (подробнее об этом ниже)
  •  Добавлен магический метод __callStatic(), аналогичный __call, но вызываемый как статический (myclass::foo())
  •  Динамический вызов статических методов: $a = 'helper'; $b = 'foo'; $a::$b() //вызовет helper::foo()
  •  MySQLInd, ini-magic, openSSL, работа с датой, XSLT, уборка мусора, строки NOWDOC и многое другое
Теперь подроблее про оператор <b>?:</b>. Как вы знаете, существует сокращённый условный оператор "условие ? оператор1 : оператор2". В PHP6 собирались ввести краткий вариант: "условие ?: оператор1", который пригодился бы в случае, когда нам не нужен оператор2 (выполняющийся в случае ложности условия). Теперь же вы видим, что этот оператор появился в PHP5.3, но с несколько иным значением.
Пример использования:
Код

$a = true ?: false; // true
$a = false ?: true; // true
$a = "" ?: 1; // 1
$a = 0 ?: 2; // 2
$a = array() ?: array(1); // array(1);
$a = strlen("") ?: strlen("a"); // 1


Изменено поведение статических методов:
Код

class A {
    public static function whoami() {
        echo __CLASS__;
    }

    public static function identity() {
       self::whoami();
    }
}

class B extends A {
    public static function whoami() {
        echo __CLASS__;
    }
}

B::identity(); // A <-- PHP < 5.3

Код

class A {
    public static function whoami() {
        echo __CLASS__;
    }

    public static function identity() {
        static::whoami();
    }
}

class B extends A {
    public static function whoami() {
        echo __CLASS__;
    }
}

B::identity(); // B <-- >= PHP 5.3


crosspost in http://w-name.ru/blog

Автор: Vaulter 15.3.2008, 14:19
а что за строки NOWDOC
 smile 

Автор: Serkys 15.3.2008, 14:41
Цитата(Vaulter @  15.3.2008,  14:19 Найти цитируемый пост)
а что за строки NOWDOC

Код

$bar = <<<‘TWO’
this is $fubar
TWO;
/* string(16) "this is $fubar" */


Автор: vasac 15.3.2008, 16:06
Темы "масса улучшений" и "усовершенствована обработка" не раскрыты.
Чем NOWDOC отличается от HEREDOC?

Автор: Serkys 15.3.2008, 16:12
Цитата(vasac @  15.3.2008,  16:06 Найти цитируемый пост)
Темы "масса улучшений" и "усовершенствована обработка" не раскрыты.

Информации об этом пока мало. Про изменения в движке и обработке исключений мне ничего не удалось найти. Нашёл только сами эти фразы.

Добавлено через 3 минуты и 22 секунды
Цитата(vasac @  15.3.2008,  16:06 Найти цитируемый пост)
Чем NOWDOC отличается от HEREDOC?

NOWDOC не обрабатывает переменные/спецсимволы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)