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

Категория: Новости
Нажмите для полного просмотра!
Что нового в PHP 5.3  Дмитрий Стогов, слайд №1Что нового в PHP 5.3  Дмитрий Стогов, слайд №2Что нового в PHP 5.3  Дмитрий Стогов, слайд №3Что нового в PHP 5.3  Дмитрий Стогов, слайд №4Что нового в PHP 5.3  Дмитрий Стогов, слайд №5Что нового в PHP 5.3  Дмитрий Стогов, слайд №6Что нового в PHP 5.3  Дмитрий Стогов, слайд №7Что нового в PHP 5.3  Дмитрий Стогов, слайд №8Что нового в PHP 5.3  Дмитрий Стогов, слайд №9Что нового в PHP 5.3  Дмитрий Стогов, слайд №10Что нового в PHP 5.3  Дмитрий Стогов, слайд №11Что нового в PHP 5.3  Дмитрий Стогов, слайд №12Что нового в PHP 5.3  Дмитрий Стогов, слайд №13Что нового в PHP 5.3  Дмитрий Стогов, слайд №14Что нового в PHP 5.3  Дмитрий Стогов, слайд №15Что нового в PHP 5.3  Дмитрий Стогов, слайд №16Что нового в PHP 5.3  Дмитрий Стогов, слайд №17Что нового в PHP 5.3  Дмитрий Стогов, слайд №18Что нового в PHP 5.3  Дмитрий Стогов, слайд №19Что нового в PHP 5.3  Дмитрий Стогов, слайд №20Что нового в PHP 5.3  Дмитрий Стогов, слайд №21Что нового в PHP 5.3  Дмитрий Стогов, слайд №22Что нового в PHP 5.3  Дмитрий Стогов, слайд №23Что нового в PHP 5.3  Дмитрий Стогов, слайд №24Что нового в PHP 5.3  Дмитрий Стогов, слайд №25Что нового в PHP 5.3  Дмитрий Стогов, слайд №26Что нового в PHP 5.3  Дмитрий Стогов, слайд №27Что нового в PHP 5.3  Дмитрий Стогов, слайд №28Что нового в PHP 5.3  Дмитрий Стогов, слайд №29Что нового в PHP 5.3  Дмитрий Стогов, слайд №30

Содержание

Вы можете ознакомиться и скачать Что нового в PHP 5.3 Дмитрий Стогов. Презентация содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Что нового в PHP 5.3
Дмитрий Стогов
Описание слайда:
Что нового в PHP 5.3 Дмитрий Стогов

Слайд 2





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

Слайд 3





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

Слайд 4





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

Слайд 5





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

Слайд 6





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

Слайд 7





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

Слайд 8





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-ы 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) { }

Слайд 9





namespace в нескольких файлах
My/Http/Request.php
<?php
namespace My::Http;
class Request {
}
My/Http/Response.php
<?php
namespace My::Http;
class Response {
}
Описание слайда:
namespace в нескольких файлах My/Http/Request.php <?php namespace My::Http; class Request { } My/Http/Response.php <?php namespace My::Http; class Response { }

Слайд 10





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

Слайд 11





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

Слайд 12





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

Слайд 13





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

Слайд 14





Внутренние имена
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 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 } }

Слайд 15





Константа __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()
Описание слайда:
Константа __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()

Слайд 16





namesapce-ы и __autoload
<?php
use My::Http::Request;
function __autoload($name) {
	require_once( 
		str_replace(“::”, “/”, $name) . “.php”);
}
$x = new Request(); // loads “My/Http/Request.php”
Описание слайда:
namesapce-ы и __autoload <?php use My::Http::Request; function __autoload($name) { require_once( str_replace(“::”, “/”, $name) . “.php”); } $x = new Request(); // loads “My/Http/Request.php”

Слайд 17





Неоднозначности в namespace-ах
Разрешение коротких имен:

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

Слайд 18





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

Слайд 19





Неоднозначности в namespace-ах
Разрешение длинных имен классов:

Имена импорта
	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)
Имена функций и констант:

Функция или константа из текущего namespace-a
A::foo();  	// function foo() in namespace A
Статический метод или константа класса
A::foo() 	// static method foo() of class A
			// A is resolved according to class resolution rules
Описание слайда:
Неоднозначности в namespace-ах Разрешение длинных имен классов: Имена импорта 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) Имена функций и констант: Функция или константа из текущего namespace-a A::foo(); // function foo() in namespace A Статический метод или константа класса A::foo() // static method foo() of class A // A is resolved according to class resolution rules

Слайд 20





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();
Описание слайда:
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();

Слайд 21





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

Слайд 22





__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;’);
Описание слайда:
__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;’);

Слайд 23





Оператор GOTO
Реализован для поддержки программно-генерируемого кода
“GOTO” внутрь цикла или оператора switch запрещен
<?php
RETRY:
try {
	…
} catch (Excption $e) {
	recovery($e);
	goto RETRY;
}
Описание слайда:
Оператор GOTO Реализован для поддержки программно-генерируемого кода “GOTO” внутрь цикла или оператора switch запрещен <?php RETRY: try { … } catch (Excption $e) { recovery($e); goto RETRY; }

Слайд 24





Оператор ?:
$a ?: $b === $a ? $a : $b
Описание слайда:
Оператор ?: $a ?: $b === $a ? $a : $b

Слайд 25





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
Описание слайда:
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

Слайд 26





Константа __DIR__
__DIR__ === dirname(__FILE__)
<?php
class Foo {
	const BAR = dirname(__FILE__); // error
	const BAR = __DIR__;
	public $bar = dirname(__FILE__); // error
	public $bar = __DIR__;
}
Описание слайда:
Константа __DIR__ __DIR__ === dirname(__FILE__) <?php class Foo { const BAR = dirname(__FILE__); // error const BAR = __DIR__; public $bar = dirname(__FILE__); // error public $bar = __DIR__; }

Слайд 27





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

Слайд 28





Сборщик мусора
Уничтожает циклические структуры
<?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 $a = array(); $a[0] =& $a; // refcount is 2 unset($a); echo gc_collect_cycles(); // 1 – number of // collected variables gc_disable(); gc_enable();

Слайд 29





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

Слайд 30






Вопросы?
Описание слайда:
Вопросы?



Похожие презентации
Mypresentation.ru
Загрузить презентацию