SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Александр Симанович
   Руководитель группы разработчиков
    MTV Entertainment в EPAM Systems
   PHP Skill Manager в EPAM Systems
   Enrico Zimuel
     ZF core developer
     ZFConf 2012
   Обзор ZF2
   Новая система Autoloading
   Dependency Injection
   Event manager
   Новый MVC
   Быстрый старт: ZendSkeletonApplication
   Система пакетов (packages)
   От ZF1 к ZF2
   Новая архитектура (MVC, DI, Events)
   >= PHP 5.3
   Отменен CLA (Contributor License
    Agreement)
   Git (GitHub) вместо SVN
   Улучшенная производительность
   Модульность
   Система пакетов (packages)
   Подход ZF1:
     Singleton
     Registry
     Hard-Coded Dependencies
   Подход ZF2:
     Aspect Oriented Design
     Dependency Injection
   Методологии
     Уменьшение связанности кода (ZendDi)
     Событийность (ZendEventManager)
     Стандартные классы (ZendStdlib)
   Используются возможности PHP 5.3
     Namespace
     Лямбда функции и замыкания
     Лучшая производительность
   Никаких require_once
   Множество подходов:
     Стиль ZF1: include_path autoloader
     Autoloading по префиксу или неймспейсу
     Class-map autoloading
   Генерация .classmap.php из командной
    строки:
    bin/classmap_generator.php
   Usage is trivial:
    $ cd your/library
    $ php /path/to/classmap_generator.php -w
   Class-Maps дают 25% прироста по
    сравнению ZF1 autoloader без
    акселерации, 60-80% прироста, если
    используется кэширование опкода
   Связывание неймспейсов/префиксов с
    путем дает >10% прироста
    производительности без акселерации,
    40% - с кэшированием опкода

Note: новый autoloading доступен в ZF 1.12
   Как управлять зависимостями между
    объектами?
   Dependency injection (DI) это шаблон
    проектирования, который снижает
    связанность между компонентами
    программы
class Foo {
    protected $bar;
    …
    public function __construct() {
         $this->bar= new Bar();
    }
    …
}
class Foo {
     protected $bar;
     …
     public function __construct(Bar $bar) {
          $this->bar = $bar;
     }
     …
}
class Foo {
     protected $bar;
     …
     public function setBar(Bar $bar) {
          $this->bar = $bar;
     }
     …
}
WITHOUT DI                WITH DI (CONSTRUCT)

Недостатки:               Преимущества:
  Сложно тестировать       Легко тестировать
  Нет изоляции             Низкая связанность
  Сложность повторного     Гибкая архитектура
   использования
   Поддерживает 3 типа инъекций:
     Constructor
     Interface
     Setter
   Реализует DI Container:
     Управление зависимостями с помощью
     конфигураций и аннотаций
$definition = array(
     'Foo' => array(
          'setBar' => array(
               'bar' => array(
                     'type'     => 'Bar',
                     'required' => true,
               ),
          ),
     ),
);
use ZendDiDi,
     ZendDiConfiguration;
$di = new Di;
$config = new Configuration(array(
     'definition' => array(
          'class' => $definition
     )
));
$config->configure($di);
$foo = $di->get('Foo'); // contains Bar!
namespace Example {
      use ZendDiDefinitionAnnotation as Di;
      class Foo {
            public $bar;
            /**
             * @DiInject()
             */
            public function setBar(Bar $bar){
                  $this->bar = $bar;
            }
      }
      class Bar {
      }
}
$compiler = new
ZendDiDefinitionCompilerDefinition();

$compiler->addDirectory('File path of Foo and Bar');
$compiler->compile();

$definitions = new ZendDiDefinitionList($compiler);
$di = new ZendDiDi($definitions);

$baz = $di->get('ExampleFoo'); // contains Bar!
   Event Manager – объект, агрегирующий
    слушателей для одного или нескольких
    событий, а также вызывающий события
   Listener – callback, реагирующий на
    события – слушатель.
   Event – это действие
use ZendEventManagerEventManager;
$events = new EventManager();
$events->attach('do', function($e) {
      $event = $e->getName();
      $params = $e->getParams();
      printf(‘Еvent “%s”, with parameters %s',
            $event, json_encode($params));
});
$params = array('foo' => 'bar', 'baz' => 'bat');
$events->trigger('do', null, $params);
   Bootstrap, route, dispatch, response…
   В MVC ZF2 все является событием
   Базовый блок в ZF2 MVC приложении это
    модуль
   Модуль это коллекция кода и других
    файлов, которые решают специфическую
    атомарную задачу большой бизнес задачи
   Модуль это:
     Namespace
     Module.php
   Простой скелет приложения,
    использующий ZF2 MVC и модульную
    систему
   Работает на ZF2.0.0beta4
   Весь на код на GitHub, submodules…


git clone –recursive
git://github.com/zendframework/ZendSkeletonApplication.git
...
'router' => array(
       'routes' => array(
       ...
       ),
),
'controller' => array(
       'classes' => array(
               'index' => 'ApplicationControllerIndexController'
       ),
),
'view_manager' => array(
       'display_not_found_reason' => true,
       'display_exceptions'        => true,
       'doctype'                   => 'HTML5',
),
...
namespace ApplicationController;
use ZendMvcControllerActionController,
      ZendViewModelViewModel;

class IndexController extends ActionController
{
      public function indexAction()
      {
            return new ViewModel();
      }
}
   Легко переносить модули:
     Скопировать в папку module (или vendor)
     Подключить модуль в application.config.php
     Скопировать конфиг модуля в
     /config/autoload/module.<name>.config.php
   Pyrus
   http://packages.zendframework.com/
   Install and configure pyrus:
    wget http://packages.zendframework.com/pyrus.phar
    pyrus.phar .
    pyrus.phar . channel-discover packages.zendframework.com

   Install a Zend_<component>:
    pyrus.phar . install zf2/Zend_<component>
   Переход с минимальной переписью кода
   Основные шаги
     Namespace: Zend_Foo => ZendFoo
     Exceptions: Zend_Exception больше нет
      (интерфейс для каждого компонента)
     Autoloading: 3 варианта (ZF1 включительно)
     MVC: модули, события
http://tiny.cc/5dw8ew
   2 марта 2012 – ZF2 beta 3 released
   22 мая 2012 – ZF2 beta 4 released
     Travis CI integration
     Composer support (http://packagist.org/)
   ZF2 beta 5?
   Релиз? «Начало лета»?
   http://framework.zend.com/zf2
   http://github.com/zendframework
   https://github.com/zendframework/ZendSkel
    etonApplication
   Getting Started with Zend Framework 2 by
    Rob Allen, http://www.akrabat.com
   Еженедельные IRC митинги
    (#zf2-meeting on Freenode)
   #zftalk.2 on Freenode IRC
•   Email: as@extrascript.com
•   Skype: aliaksandr.simanovich
•   Twitter: simanjan
•   Blog: simanovich.info
Zend framework 2

Mais conteúdo relacionado

Mais procurados

Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПzfconfua
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...sqadays8
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 

Mais procurados (19)

Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 

Destaque

DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓNDESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓNJuan López
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuelaJair De la Cruz
 
Desarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidadDesarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidadAnny Jimenez Torrano
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educaciónpatyretacuevas
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educaciónSmartgames PERU
 
La educación y sus funciones ppt
La educación y sus funciones pptLa educación y sus funciones ppt
La educación y sus funciones pptS Lzd
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuelaestrelladominguera
 

Destaque (8)

DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓNDESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
DESARROLLO HISTÓRICO Y PERSPECTIVAS FILOSÓFICAS DE LA EDUCACIÓN
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuela
 
Desarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidadDesarrollo histórico de la formación de sociólogos en la universidad
Desarrollo histórico de la formación de sociólogos en la universidad
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educación
 
Funciones sociales de la educación
Funciones sociales de la educaciónFunciones sociales de la educación
Funciones sociales de la educación
 
La educación y sus funciones ppt
La educación y sus funciones pptLa educación y sus funciones ppt
La educación y sus funciones ppt
 
Funcion Social de la Educacion
Funcion Social de la EducacionFuncion Social de la Educacion
Funcion Social de la Educacion
 
Las funciones sociales de la escuela
Las funciones sociales de la escuelaLas funciones sociales de la escuela
Las funciones sociales de la escuela
 

Semelhante a Zend framework 2

Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0Alexey Kachayev
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 

Semelhante a Zend framework 2 (20)

UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
php frameworks
php frameworksphp frameworks
php frameworks
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 

Zend framework 2

  • 2.
  • 3. Руководитель группы разработчиков MTV Entertainment в EPAM Systems  PHP Skill Manager в EPAM Systems
  • 4. Enrico Zimuel  ZF core developer  ZFConf 2012
  • 5. Обзор ZF2  Новая система Autoloading  Dependency Injection  Event manager  Новый MVC  Быстрый старт: ZendSkeletonApplication  Система пакетов (packages)  От ZF1 к ZF2
  • 6.
  • 7. Новая архитектура (MVC, DI, Events)  >= PHP 5.3  Отменен CLA (Contributor License Agreement)  Git (GitHub) вместо SVN  Улучшенная производительность  Модульность  Система пакетов (packages)
  • 8. Подход ZF1:  Singleton  Registry  Hard-Coded Dependencies  Подход ZF2:  Aspect Oriented Design  Dependency Injection
  • 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:  Управление зависимостями с помощью конфигураций и аннотаций
  • 21. $definition = array( 'Foo' => array( 'setBar' => array( 'bar' => array( 'type' => 'Bar', 'required' => true, ), ), ), );
  • 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 { } }
  • 24. $compiler = new ZendDiDefinitionCompilerDefinition(); $compiler->addDirectory('File path of Foo and Bar'); $compiler->compile(); $definitions = new ZendDiDefinitionList($compiler); $di = new ZendDiDi($definitions); $baz = $di->get('ExampleFoo'); // contains Bar!
  • 25.
  • 26. Event Manager – объект, агрегирующий слушателей для одного или нескольких событий, а также вызывающий события  Listener – callback, реагирующий на события – слушатель.  Event – это действие
  • 27. use ZendEventManagerEventManager; $events = new EventManager(); $events->attach('do', function($e) { $event = $e->getName(); $params = $e->getParams(); printf(‘Еvent “%s”, with parameters %s', $event, json_encode($params)); }); $params = array('foo' => 'bar', 'baz' => 'bat'); $events->trigger('do', null, $params);
  • 28.
  • 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
  • 33.
  • 34.
  • 35. ... 'router' => array( 'routes' => array( ... ), ), 'controller' => array( 'classes' => array( 'index' => 'ApplicationControllerIndexController' ), ), 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', ), ...
  • 36. namespace ApplicationController; use ZendMvcControllerActionController, ZendViewModelViewModel; class IndexController extends ActionController { public function indexAction() { return new ViewModel(); } }
  • 37. Легко переносить модули:  Скопировать в папку module (или vendor)  Подключить модуль в application.config.php  Скопировать конфиг модуля в /config/autoload/module.<name>.config.php
  • 38.
  • 39.
  • 40. Pyrus  http://packages.zendframework.com/  Install and configure pyrus: wget http://packages.zendframework.com/pyrus.phar pyrus.phar . pyrus.phar . channel-discover packages.zendframework.com  Install a Zend_<component>: pyrus.phar . install zf2/Zend_<component>
  • 41.
  • 42. Переход с минимальной переписью кода  Основные шаги  Namespace: Zend_Foo => ZendFoo  Exceptions: Zend_Exception больше нет (интерфейс для каждого компонента)  Autoloading: 3 варианта (ZF1 включительно)  MVC: модули, события
  • 44. 2 марта 2012 – ZF2 beta 3 released  22 мая 2012 – ZF2 beta 4 released  Travis CI integration  Composer support (http://packagist.org/)  ZF2 beta 5?  Релиз? «Начало лета»?
  • 45. http://framework.zend.com/zf2  http://github.com/zendframework  https://github.com/zendframework/ZendSkel etonApplication  Getting Started with Zend Framework 2 by Rob Allen, http://www.akrabat.com  Еженедельные IRC митинги (#zf2-meeting on Freenode)  #zftalk.2 on Freenode IRC
  • 46. Email: as@extrascript.com • Skype: aliaksandr.simanovich • Twitter: simanjan • Blog: simanovich.info