Что нового в PHP 5.3 Дмитрий Стогов. Немного о себе сотрудник Zend Technologies отдел Advanced Technologies активный разработчик PHP и ZE автор и мантейнер.

Slides:



Advertisements
Similar presentations
PHP functions What are Functions? A function structure:
Advertisements

Introduction to PHP Dr. Charles Severance
METHOD OVERRIDING Sub class can override the methods defined by the super class. Overridden Methods in the sub classes should have same name, same signature.
ЗАРЯДКА НА АНГЛИЙСКОМ ЯЗЫКЕ.  Зарядка на уроке английского языка может стать самым любимым и веселым занятием для детей, при том, что она проходит исключительно.
ООП Классы. Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Работа выполнена учителем физики Паниной О. В. Руководитель:
Copyright © 2007, Zend Technologies Inc. What’s coming in PHP 5.3 By Stas Malyshev.
Системы отбора. Условные обозначения (1) (2) (3) (4) (5) (6) (7) Математическое моделирование процессов отбора2.
Савенко Мария Олеговна, 361 группа Научный руководитель: старший преподаватель В.С.Полозов.
Астащенко Александр, 445 группа Научный руководитель: В.Г.Шистеров.
Тушин Александр, ЗАО «Компания Либэр». 1) Предоставление полнотекстовых материалов 2) Поиск по внутреннему содержанию документа 3) Доступность в режиме.
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
Всевоволод Головизнин, MVC – паттерн проектирование, в котором бизнес - логика, управляющая логика и интерфейс разделены на три отдельных компонента.
Bank ownership and lending behavior Alejandro Micco, Ugo Panizza Politicians and banks: Political influences on government-owned banks in emerging markets.
Учитель математики Кулакова Т.М. МОУ ООШ №15 г.о Новокуйбышевск Самарской области Сентябрь 2011г.
Что за хулиган толкает пассажиров автобуса то вперед, то назад? Этот хулиган, вернее, хулиганка -
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
Создание сервиса синхронизации разнородных баз данных Допущена к защите зав. кафедрой: д.ф.м.н., профессор Терехов А.Н. Научный руководитель: доцент Графеева.
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Особенности Java. Блок static static { } Создание и уничтожение объектов  new – создание объекта  finalyze()
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
Михаил Налётов Активные продажи на сайте. Может ли ваш сайт работать еще эффективнее?
Программирование на стороне сервера. Языки для программирования на стороне сервера Языки программирования: Perl PHP Java Технология Microsoft для использования.
Apache Harmony или как сделать курсовую работу в рамках этого проекта Фурсов Михаил.
 Нужно много различных протоколов связи  Каждый из них может реализовываться на разных платформах Современные сети Много устройств, компьютеров и сетей.
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
"The European Molecular Biology Open Software Suite"
Особенности языка JavaScript и его использования.
Реализация XPath над S-выражениями 2007 Миленин Евгений, гр. 544 Кафедра Системного Программирования Математико-Механический ф-т, СПбГУ Научный руководитель:
Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»
Adobe Photoshop CS2 Контуры Макросы. Особенности контуров Как и выделения: Могут использоваться для ограничения действия слоёв или инструментов Могут.
Проект «Безопасный браузер» Визовитин Николай Кадашев Дмитрий.
Объектно-ориентированное проектирование DSP-систем в телекоммуникациях Подготовил: Сергеев Виктор Николаевич СПбГУ, математико-механический Факультет,
Автор: студент 545 группы Абусалимов Э.Ш. Научный руководитель: асп. каф. системного программирования Бондарев А.В. Рецензент: Венгеров В.В. Система сборки,
Обработка исключений Гудов А.М., Завозкин С.Ю
Проверка эквивалентности срединной и линейной осей многоугольника Дипломная работа студента 545 группы Подколзина Максима Валериевича Санкт-Петербургский.
Начало Реформации в Европе. Обновление христианства.
Множественное выравнивание С.А.Спирин, весна
Visual Basic 7 Объектно-ориентированный язык программирования.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Nikolay Kostov Telerik Corporation
INFSO-RI Enabling Grids for E-sciencE Управление заданиями в GRID. Н. Клопов ПИЯФ, Гатчина.
PHP + Erlang ускоряем checkout. Checkout – оформление заказа Screenshot Onepage checkout server Ajax request Next step HTML Database.
Нескучное тестирование с pytest
Подход к реализации XQuery Паращенко Олег Санкт-Петербургский Государственный Университет Обнинск, 2004.
PHP 5 OOP By: Ilia Alshanetsky. 1 New Functionality  Support for PPP  Exceptions  Object Iteration  Object Cloning  Interfaces  Autoload  And much.
Martin Kruliš This is an Object Oriented system. If we change something, the users object by Martin Kruliš (v1.0)1.
OOP with PHP Roman Bednarik
Эти удивительные профессии Учитель английского языка Камышникова Н.А. МОУ СОШ №9 Г.БАЛАШОВА.
Board Games. KnowWant to knowLearnt jigsawpuzzle adominoesyrw cfeukoloased hdscrabbleja eetashiefyjr sfmarblesaet sokbilliards ybackgammonu.
Zend Engine изнутри Дмитрий Стогов. Немного истории Zend Engine была разработана в качестве ядра для PHP 4 Andi Gutmans и Zeev Suraski в 1999 PHP 5.0.
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
Язык программирования C#
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ Metro приложения: работа с данными Краковецкий Александр, MVP/RD/PhD. DevRain Solutions.
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(“two"); lst.add(“three");
Anekdot ANDROID CLUB Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech.
Microsoft Developer Tour Технологическая экспедиция msdevtour.ru.
Advanced Programming in C
Обо мне .Net C#/F# developer MSP. Обо мне .Net C#/F# developer MSP.
VDI-in-a-Box Version 5.4.
Сергей Копорулин | Эксперт по технологиям | Microsoft
Advance OOP in PHP.
Server-Side Application and Data Management IT IS 3105 (Spring 2010)
Object Oriented PHP Martin Kruliš
Управление виртуальной инфраструктурой Hyper-V и Virtual Server
Дизайн корпоративных сайтов SharePoint 2010
November CTP Андрей Коршиков MCP-клуб, Краснодар Декабрь 2009.
Object-Oriented Programming in PHP
Classes and Objects Imran Rashid CTO at ManiWeber Technologies.
Presentation transcript:

Что нового в 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 <<<‘EOF’ EOF; Константа __DIR__

Зачем нужны 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 <?php namespace My::Http; class Request { } My/Http/Response.php <?php namespace My::Http; class Response { } My/Http/Main.php <?php namespace My::Http; function send(Request $req) { return new Response(); }

Длинные имена test1.php <?php require_once(“My/Http/Request.php”); $x = new My::

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

Импорт класса test3.php <?php require_once(“My/Http/Request.php”); use My:: $x = new Request();

Импорт целого namespace-а test4.php <?php require_once(“My/Http/Request.php”); use My::Http; $x = new test5.php <?php require_once(“My/Http/Request.php”); use My::Http as H; $x = new H::Request();

Внутренние имена 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 <?php use My:: function __autoload($name) { require_once( str_replace(“::”, “/”, $name). “.php”); } $x = new Request(); // loads “My/Http/Request.php”

Неоднозначности в 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 запрещен <?php RETRY: try { … } catch (Excption $e) { recovery($e); goto RETRY; }

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

NOWDOC Аналог строк в одиночных кавычках <?php $a = 3; $b = 5; echo <<<EOF $a+$b EOF;// prints 3+5 echo <<<‘EOF’ $a+$b EOF;// prints $a+$b echo <<<“EOF” $a+$b EOF;// printd 3+5

Константа __DIR__ __DIR__ === dirname(__FILE__) <?php class Foo { const BAR = dirname(__FILE__); // error const BAR = __DIR__; public $bar = dirname(__FILE__); // error public $bar = __DIR__; }

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 $a = array(); $a[0] =& $a;// refcount is 2 unset($a); echo gc_collect_cycles(); // 1 – number of // collected variables gc_disable(); gc_enable();

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

Вопросы?