Что нового в PHP 5.3 Дмитрий Стогов.

Презентация:



Advertisements
Похожие презентации
Что нового в PHP 5.3Что нового в PHP 5.3Почему PHP 5.3? PHP 5.2 существует уже 1.5 года. В нем найдено несколько серьезных ошибок, которые не могут быть.
Advertisements

Конференция для PHP-разработчиков в Оренбурге Нововведения в PHP 5.3 и PHP 6.0 Владимир Савенков Ведущий разработчик Компания Softline.
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Занятие Регулярные выражения Памятка (основные элементы регулярных выражений): a+ – любая последовательность a a* – любая последовательность a или.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
1. Классы ООП 1.Наследование 2.Инкапсуляция 3.Полиморфизм.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Php Что такое php? PHP – это высокоуровневый язык программирования для WEB работающий по принципу транслирующего интерпретатора.
b5_java_s4
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
1 Java 1. ВВЕДЕНИЕ В КЛАССЫ И ОБЪЕКТЫ. 2 ООП Базовый способ борьбы со сложностью программных продуктов. Методология программирования, основанная на представлении.
Архитектура «D7»: модули, классы, жизненный цикл Кирсанов Алексей Ведущий разработчик 1C-Битрикс.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Транксрипт:

Что нового в PHP 5.3 Дмитрий Стогов

Немного о себе сотрудник Zend Technologies отдел Advanced Technologies активный разработчик PHP и ZE автор и мантейнер ext/soap мантейнер поддержки FastCGI в PHP автор компоненты OpenID в Zend Frameork автор Turck MMCache

Почему PHP 5.3? PHP 5.2 существует уже 1.5 года. В нем найдено несколько серьезных ошибок, которые не могут быть исправлены без потери бинарной совместимости. В PHP 6, из-за перехода на Unicode, перестанет работать большое количество наработанного кода. Для PHP 6 было разработано много интересных дополнений и улучшений. PHP 5.3 будет содержать большинство улучшений разработанных для PHP 6, но будет способен выполнять существующий код без каких-либо изменений.

Что нового? Нововведения в языке Расширение системы конфигурирования Сборщик мусора Улучшеная производительность Исправленные ошибки Новые расширения ext/phar и ext/intl Множество улучшений в расширениях

Нововведения в языке namespaces Расширения ООП – Late Static Binding – Динамический доступ к статическим данным $classname::method(), $classname::$prop – __callstatic() Оператор goto Сокращенный условный оператор ?: NOWDOC

Зачем нужны namespace-ы? Устраняют конфликты имен – Разные namespace-ы могут использовать одно и то же имя для разных целей – Имя внутри namespace-а имеет единственный смысл Namespace-ы делают имена короче – Имена определенные в namespace-ах имеют короткое (локальное) имя и уникальное длинное (квалифицированное) для использования за пределами namespace-а – Имена и namespace-ы могут быть импортированы в другие namespace-ы используя короткое имя импорта

namesapce-ы Один namespace может определяться в нескольких файлах В namespace-е могут определяться – классы – интерфейсы – функции – константы – PHP код В namespace-е не могут определяться – Глобальные переменные PHP не поддерживает вложенных namespace-ов PHP поддерживает составные имена namespace-ов (A::B) Почти вся работа делается во время компиляции

namespace-ы define(MY_HTTP_GET, 1); define(MY_HTTP_POST, 2); class My_Http_Request { function __construct( $method = ZEND_HTTP_GET) { } function my_http_send_request( My_Http_Request $request) { } namespace My::Http; const GET = 1; const PUT = 2; class Request { function __construct( $method = GET) { } function send_request( Request $request) { }

namespace в нескольких файлах My/Http/Request.php

Длинные имена test1.php

Импорт – оператор use Импорт может быть осуществлен посредством оператора use – use My::Http; Оператор use может импортировать – Namesapce-ы – классы – интерфейсы Он не может импортировать – функции – константы – переменные В момент импорта можно сделать переименование – use My:: as HttpRequest; – use My:: the same as use My:: as Request; Оператор use действует только на текущий файл Оператор use сам не подгружает ни каких файлов

Импорт класса test3.php

Импорт целого namespace-а test4.php

Внутренние имена namespace A::B; function foo() { echo __FUNCTION__;// A::B::foo } class C { static function bar() { echo __CLASS__;// A::B::C echo __FUNCTION__;// bar echo __METHOD__;// A::B::C::bar }

Константа __NAMESPACE__ namesapce A::B; function foo() { echo __NAMESAPCE__; } $callback = foo; $callback();// global function foo() $callback = A::B::foo; $callback();// A::B::foo() $callback = __NAMESAPCE__. ::foo; $callback();// A::B::foo()

namesapce-ы и __autoload

Неоднозначности в namespace-ах Разрешение коротких имен: 1.Имена импорта use A::B::Foo; use A::B::Bar as Baz; $x = new Foo; // A::B::Foo $x = new Baz; // A::B::Bar 2.Имена из текущего namespace-а namespace A::B; class stdClass { } $x = new stdClass(); // A::B::stdClass 3.Внутренние имена PHP namespace A::B; $x = new stdClass; // internal stdClass

Неоднозначности в namespace-ах Явное разрешение специальными префиксами namespace A::B; class stdClass { } $x = new stdClass();// A::B::stdClass $x = new ::stdClass();// global stdClass $x = new namespace::stdClass();// A::B::stdClass

Неоднозначности в namespace-ах Разрешение длинных имен классов: 1.Имена импорта use A::B::C; new C::D; // class D in namespace A::B::C 2. Класс из другого namespace-a (как есть) namespace A::B; new C::D; // class D in namespace C (not A::B::C::D) Имена функций и констант: 1.Функция или константа из текущего namespace-a A::foo(); // function foo() in namespace A 2.Статический метод или константа класса A::foo() // static method foo() of class A // A is resolved according to class resolution rules

Late Static Binding class Singleton { const ID = 0; static $instance = array(); static function getInstance() { $id = static::ID; if (empty(self::$instance[$id])) { self::$instance[$id] = new static; } return self::$instance[$id]; } class Foo extends Singleton { const ID = 1; } $x = Foo::getInstance();

Динамический доступ к статическим данным класса class MySqlDriver { const NAME = MySQL; static function execute($sql) { } $db = MySqlDriver; echo $db::NAME; $db::execute(SELCT * FROM foo;);

__callstatic() class DummyDriver { const NAME = Dummy; static function __callstatic($name, $args) { echo static::NAME.::$name is not implemented; } class MySqlDriver extends DummyDriver { const NAME = MySQL; } $db = MySqlDriver; $db::execute(SELCT * FROM foo;);

Оператор GOTO Реализован для поддержки программно-генерируемого кода GOTO внутрь цикла или оператора switch запрещен

Оператор ?: $a ?: $ b === $a ? $a : $b

NOWDOC Аналог строк в одиночных кавычках

Константа __DIR__ __DIR__ === dirname(__FILE__)

INI System Разные уствновки для разных директорий [PATH=/www/test] error_repoting = E_ALL [PATH=/www/production] error_reporting = 0 Разные установки для разных виртуальных хостов [HOST= auto_prepend_file = /var/www/domain/init.php Собственный аналог.htaccess user_ini.filename =.user.ini user_ini.cache_ttl = 300

Сборщик мусора Уничтожает циклические структуры

Улучшение производительности $ php bench.php

Вопросы?