5. Обзор ZF2
Новая система Autoloading
Dependency Injection
Event manager
Новый MVC
Быстрый старт: ZendSkeletonApplication
Система пакетов (packages)
От ZF1 к ZF2
9. Методологии
Уменьшение связанности кода (ZendDi)
Событийность (ZendEventManager)
Стандартные классы (ZendStdlib)
Используются возможности PHP 5.3
Namespace
Лямбда функции и замыкания
Лучшая производительность
10.
11. Никаких require_once
Множество подходов:
Стиль ZF1: include_path autoloader
Autoloading по префиксу или неймспейсу
Class-map autoloading
12. Генерация .classmap.php из командной
строки:
bin/classmap_generator.php
Usage is trivial:
$ cd your/library
$ php /path/to/classmap_generator.php -w
13. Class-Maps дают 25% прироста по
сравнению ZF1 autoloader без
акселерации, 60-80% прироста, если
используется кэширование опкода
Связывание неймспейсов/префиксов с
путем дает >10% прироста
производительности без акселерации,
40% - с кэшированием опкода
Note: новый autoloading доступен в ZF 1.12
14.
15. Как управлять зависимостями между
объектами?
Dependency injection (DI) это шаблон
проектирования, который снижает
связанность между компонентами
программы
16. class Foo {
protected $bar;
…
public function __construct() {
$this->bar= new Bar();
}
…
}
17. class Foo {
protected $bar;
…
public function __construct(Bar $bar) {
$this->bar = $bar;
}
…
}
18. class Foo {
protected $bar;
…
public function setBar(Bar $bar) {
$this->bar = $bar;
}
…
}
19. WITHOUT DI WITH DI (CONSTRUCT)
Недостатки: Преимущества:
Сложно тестировать Легко тестировать
Нет изоляции Низкая связанность
Сложность повторного Гибкая архитектура
использования
20. Поддерживает 3 типа инъекций:
Constructor
Interface
Setter
Реализует DI Container:
Управление зависимостями с помощью
конфигураций и аннотаций
22. use ZendDiDi,
ZendDiConfiguration;
$di = new Di;
$config = new Configuration(array(
'definition' => array(
'class' => $definition
)
));
$config->configure($di);
$foo = $di->get('Foo'); // contains Bar!
23. namespace Example {
use ZendDiDefinitionAnnotation as Di;
class Foo {
public $bar;
/**
* @DiInject()
*/
public function setBar(Bar $bar){
$this->bar = $bar;
}
}
class Bar {
}
}
26. Event Manager – объект, агрегирующий
слушателей для одного или нескольких
событий, а также вызывающий события
Listener – callback, реагирующий на
события – слушатель.
Event – это действие
29. Bootstrap, route, dispatch, response…
В MVC ZF2 все является событием
30. Базовый блок в ZF2 MVC приложении это
модуль
Модуль это коллекция кода и других
файлов, которые решают специфическую
атомарную задачу большой бизнес задачи
Модуль это:
Namespace
Module.php
31.
32. Простой скелет приложения,
использующий ZF2 MVC и модульную
систему
Работает на ZF2.0.0beta4
Весь на код на GitHub, submodules…
git clone –recursive
git://github.com/zendframework/ZendSkeletonApplication.git
37. Легко переносить модули:
Скопировать в папку module (или vendor)
Подключить модуль в application.config.php
Скопировать конфиг модуля в
/config/autoload/module.<name>.config.php
42. Переход с минимальной переписью кода
Основные шаги
Namespace: Zend_Foo => ZendFoo
Exceptions: Zend_Exception больше нет
(интерфейс для каждого компонента)
Autoloading: 3 варианта (ZF1 включительно)
MVC: модули, события