SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Что несёт нам Zend Framework 2.0?   Надежда Блинова ,  веб-программист , Wizartech Георгий Туревич , ведущий веб-программист ,   Wizartech 27 марта 2010 г. Санкт-Петербург
Планируемые изменения   ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Используемые новинки  php  5.3
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре
Изменения в архитектуре Унифицированный конструктор public function  setOptions ( $options )  {    // ...       foreach ( $options  as  $key  =>  $value ) {           $method  =  'set'  .  $key ;          if ( method_exists ( $this ,  $method )) {               $this -> $method ( $value );          }      }      return  $this ;  }  Во многих компонентах в методе  setOptions  часто встречается повторяющийся код:
Изменения в архитектуре Унифицированный конструктор namespace  Z end ; // Новый, общий для всех класс  Options c  методом  setOptions    class  Options   {       public static function  setOptions ( $object , array  $options )       {           if (! is_object ( $object )) {               return;           }           foreach ( $options  as  $key  =>  $value ) {                $method  =  'set'  .  self :: _normalizeKey ( $key );               if ( method_exists ( $object ,  $method )) {                    $object -> $method ( $value );               }           }       }         public static function  setConstructorOptions ( $object ,  $options )       {     ...     }         protected static function  _normalizeKey ( $key )       {   ...     }   } 
Изменения в архитектуре Унифицированный конструктор namespace  Z end ;   class  Options   {       public static function  setOptions ( $object , array  $options )       {   ...   }         public static function  setConstructorOptions ( $object ,  $options )       {             if ( $options  instanceof  Zend_Config ) {                $options  =  $options -> toArray ();           }           if ( is_array ( $options )) {                self :: setOptions ( $object ,  $options );           }      }         protected static function  _normalizeKey ( $key )       {            $option  =  str_replace ( '_' ,  ' ' ,  strtolower ( $key ));            $option  =  str_replace ( ' ' ,  '' ,  ucwords ( $option ));           return  $option ;        }   } 
Изменения в архитектуре Унифицированный конструктор use  Z end Options  as  Options ;   class  Foo   {       public  $bar  =  '' ;       public  $baz  =  '' ;          public function  __construct ( $options  =  null )       {            Options :: setConstructorOptions ( $this ,  $options );       }       public function  setOptions (array  $options )       {            Options :: setOptions ( $this ,  $options );       }       public function  setBar ( $value )       {            $this -> bar  =  $value ;       }         public function  setBaz ( $value )       {            $this -> baz  =  $value ;       }   } 
Изменения в архитектуре Унифицированный конструктор    $foo  = new  Foo (array( 'bar'  =>  'baz' ));   echo  $foo -> bar ;  // "baz"      $foo -> setOptions (array( 'bar'  =>  'boo' ,  'baz'  =>  'bat' ));   echo  $foo -> bar  .  $foo -> baz ;  // "boobat" 
[object Object],[object Object],[object Object],[object Object],[object Object],Переводим в camelCase : Изменения в архитектуре Стандартизация массива  Options str_replace ( ' ' ,  '' ,  ucwords ( str_replace ( '_' ,  ' ' ,  $value )));
Изменения в архитектуре Exceptions.  Исключения // у каждого компонента должен быть свой интерфейс  Exception namespace Foo Bar ;   interface  Exception   {   }      class  InvalidArgumentException        extends InvalidArgumentException        implements  Exception   {   }      try {       throw new  InvalidArgumentException ();   } catch (Foo Bar Exception $e ) {   } 
[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре Контрактное программирование
[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре Уменьшение количества синглтонов
[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре С оздание компонентов общего назначения Области дублирующегося кода будут вынесены в отдельные подключаемые файлы
[object Object],Изменения в архитектуре Новые возможности  Php  5.3 в плагинах class  Example  {    public function  __invoke () {      echo  "Hello World!   " ;    }  }  $foo  = new  Example ;  $foo ();
[object Object],Изменения в архитектуре Новые возможности  Php  5.3 в плагинах Нотация: function ( $var ) use ( $outerVar1 ,  $outerVar2 , ...) {}  Пример: function  outer ( $x )  //Определение внешней функции  {     $y   =   2 ;  //Локальная переменная внешней функции     $inner   =   function ( $a ) use ( $x ,  $y )  //Определение внутренней функции     {         $b   =   4 ;  //Локальная переменная внутренней функции         $res   =   $x   +   $y   +   $a   +   $b ;        echo  $res ;  //Результат будет равен 10     };     $inner ( 3 );  //Вызов внутренней функции  }  outer ( 1 );
[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре Пространства имен
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в архитектуре Использование  goto
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в плагинах
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в плагинах Проблемы с плагинами
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в плагинах Рекомендации: именование плагинов
[object Object],Изменения в плагинах Рекомендации: использование __ invoke() При необходимости __ invoke () должен переадресовывать на другой метод interface  Validator   {     public function  isValid ( $value ,  $context  =  null );     public function  __invoke ( $value ,  $context  =  null );   } class  FooValidator  implements  Validator   {     public function  isValid ( $value ,  $context  =  null )     {          // ...     }         public function  __invoke ( $value ,  $context  =  null )     {          return  $this -> isValid ( $value ,  $context );     }   }
[object Object],Изменения в плагинах Рекомендации: использование __ invoke() $ validator   = new M y F oo Validator ();   // новый вызов if  ( $ validator ( $value ) ) {} // аналогично старому вызову if  ( $ validator->isValid($value) ) {}
[object Object],Изменения в плагинах Рекомендации:  реализация интерфейса  Configurable interface  ConfigurableInterface   {     public function  setOptions ( $options );   }  class  Adapter  implements  ConfigurableInterface   {     public function  setOptions ( $options )     {          // ... настраиваем объект ...     }   } 
[object Object],Изменения в плагинах Рекомендации:  реализация интерфейса  Configurable class  ValidatorFactory   {       public static function  factory ( $options )       {           if ( $options instance of  Z end Config ) {                $options  =  $options -> toArray ();           }            if (! is_array ( $options )) {               throw new  InvalidArgumentException ();           }            $adapter  = new  $options [ 'type' ];            $adapter -> setOptions ( $options [ 'params' ]);           return  $adapter ;       }   } Фабрики должны иметь связанный с ними загрузчик плагинов и позволять подключать другие загрузчики.
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Изменения в плагинах Рекомендации: цепочки ( Chains )
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Новая реализация  MVC
[object Object],[object Object],[object Object],[object Object],[object Object],Новая реализация  MVC
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller 2.0
[object Object],[object Object],[object Object],Zend_Controller 2.0
[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller 2.0 Event-driven Model: PubSub
Zend_Controller 2.0 Event-driven Model: PubSub class  TestPubSub  {      public function  someFunction ( $message )      {          echo( 'someFunction: '  .    $message );      }            public function  anotherFunction ( $message )      {          echo( 'anotherFunction: '  .    $message );      }      }  $classObject  = new  TestPubSub ();  $providerObject  = new  Provider ();  $outerFunction  = function ( $message ) {      echo( 'outerFunction: '  .    $message );  }; 
Zend_Controller 2.0 Event-driven Model: PubSub $ someFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $classObject ,  'someFunction' );  $ anotherFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $classObject ,  'anotherFunction' );  $ outerFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $outerFunction );  $providerObject -> publish ( 'mvc.routing' ,  'Join the Dark Side!' );  $providerObject -> publish ( 'mvc.routing' ,  'We have cookies!' );  $providerObject -> unsubscribe ( $ someFunctionHandle );  echo( '--- Производим unsubscribe функции someFunction ---' );  $providerObject -> publish ( 'mvc.routing' ,  'Join the Dark Side!' );  $providerObject -> publish ( 'mvc.routing' ,  'We have cookies!' );
Zend_Controller 2.0 Event-driven Model: PubSub someFunction:  Join the Dark Side!   another Function:  Join the Dark Side!   outer Function:  Join the Dark Side!  someFunction:  We have cookies! another  Function:  We have cookies! outer  Function:  We have cookies! ---  Производим  unsubscribe  функции  someFunction --- another Function:  Join the Dark Side!   outer Function:  Join the Dark Side!  another  Function:  We have cookies! outer  Function:  We have cookies!
[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller 2.0 Event-driven model
Zend_Controller 2.0 Event-driven model routing :       ...    dispatching :        $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.pre' ,  $e );        $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching' ,  $e );        $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.post' ,  $e );        $e -> setState ( 'response' );     response :       ...    error :        $pubsub -> publishUntil ( $stateChanged ,  'mvc.error' ,  $e );   Определяется 4 состояния :
Zend_Controller 2.0 Event-driven model // $stateChanged –  замыкание, проверяющее состояние события dispatching :       $e -> markState ();       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.pre' ,  $e );      if ( $e -> isStateChanged ()) {          goto  switchState ;      }       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching' ,  $e );      if ( $e -> isStateChanged ()) {          goto  switchState ;      }       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.post' ,  $e );      if ( $e -> isStateChanged ()) {          goto  switchState ;      }       $e -> setState ( 'response' );
Zend_Controller 2.0 Event-driven model switchState :      switch ( $e -> getState ()) {          case  'routing' :              goto  routing ;          case  'dispatching' :              goto  dispatching ;          case  'response' :              goto  response ;          case  'error' :              goto  error ;          default:              throw new  StateException ();      }  
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller 2.0 Дополнительные   компоненты
[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller 2.0 Последствия
[object Object],[object Object],[object Object],Zend_Controller 2.0 Poka Yoke  фильтрация
[object Object],[object Object],Zend_Controller 2.0 Список изменений в  Action   Controller //вызов через HelperBroker      $this -> _helper -> redirector ( 'index' );   //превратится в  $this -> redirector ( 'index' );   //доступ к свойствам  $this -> _helper -> viewRenderer -> setNoRender ( true );   //станет таким  $this -> viewRenderer -> setNoRender ( true ); 
[object Object],[object Object],[object Object],[object Object],Zend_Controller_ Router  2.0
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Zend_Controller_ Router  2.0 Изменения в маршрутах
[object Object],[object Object],[object Object],Zend_Controller_ Router  2.0 Chains
[object Object],[object Object],[object Object],Zend_Controller_ Router  2.0 Поддержка кэширования
[object Object],[object Object],[object Object],[object Object],Zend_ Form  2.0
[object Object],Zend_ Form  2.0 Рекомендации: рефакторинг  view   helpers Zend_ Form  2.0 $element -> setOptions (array(        'size'       =>  25 ,        'maxlength'  =>  140 ,        'class'      =>  'form-text' ,   ));   echo  $view -> formText ( $element ); 
[object Object],Zend_ Form  2.0 Рекомендации :  использование  PubSub Будут предложены готовые цепочки: // Учитывая, что  Z endF ormecoratorChain  // наследует  P ubsubilterChain  // и что render() переадресует на filter():   $chain  = new  Z end F orm DecoratorChain ();   $chain -> subscribe ( ' Z endF ormecoratorabel' );   $chain -> subscribe ( ' Z endF ormecoratoriewHelper' );   $chain -> subscribe ( ' M yD ecoratoriv' );   $chain -> setView ( $view );   echo  $chain -> render ( $element );   $chain  = new  Z end F orm D ecorator DefinitionListChain ;   $chain -> setView ( $view );   echo  $chain -> render ( $element );
[object Object],Zend_ Form  2.0 Рекомендации :  использование  PubSub $vChain  = new  Z end V alidator ValidatorChain ();   $vChain -> subscribe ( 'Int' );   $vChain -> subscribe ( 'MinLength' , array( 3 ));   $vChain -> subscribe ( 'MaxLength' , array( 20 ));   // прекращение валидации на первой ошибке подписчика $vChain -> breakOnFailure ( true );    $element -> setValidatorChain ( $vChain ); if   ( $element -> isValid ( $values )) { … }       $fChain  = new  Z end F ilter FilterChain ();   $fChain -> subscribe ( 'StringTrim' );   $element -> setFilterChain ( $fChain );   $newValues  =  $elemen -> filter ( $values );
[object Object],Zend_ Form  2.0 // Извлекаем ранее созданные цепочки фильтров и валидаторов  // всех элементов формы   $filterChain  =  $form -> getFilterChain ();      // Присоединяем к модели:    $model -> setFilterChain ( $filterChain );   Рекомендации: работа с  цепочками фильтров и валидаторов
[object Object],Zend_ Form  2.0 Z end FilterChain :: __set_state (array(        "foo"  =>  Z end F ilter C hain Element :: __set_state (array(            'filterChain'  =>  Z end F ilter FilterChain (array(                '_subscribers => array(                   ' StrimTrim ',               ),           )),           ' validatorChain ' =>  Z endF ilteralidatorChain(array(               ' _subscribers  => array(                   array( 'Int' ),                   array( 'MinLength' , array( 3 )),                   array( 'MaxLength' , array( 25 )),               ),           )),       )),   ))   Рекомендации: работа с  цепочками фильтров и валидаторов
Zend_ Form  2.0 Будет использоваться так: $chain -> isValid ( $values );   $value  =  $chain -> get ( $key );   $chain -> set ( $key ,  $value );   $chain -> setAll ( $values );   $elementChain  =  $chain -> getChain ( $key );    Рекомендации: работа с  цепочками фильтров и валидаторов
[object Object],Zend_ Form  2.0 Рекомендации: разделение  между метаданными и поведением $form -> setMetadata (array(        'action'  =>  $url ,        'method'  =>  'post' ,        'id'      =>  'registration' ,   ));      $element -> setMetadata (array(        'class'      =>  'form-text' ,        'size'       =>  25 ,        'maxlength'  =>  140 ,   ));   $element -> setName ( 'foo' ); 
[object Object],[object Object],[object Object],[object Object],Zend_ Form  2.0 Рекомендации:  отмена установки  id , перевод
[object Object],[object Object],[object Object],Zend_ Form  2.0 Проблемы обратной совместимости
[object Object],[object Object],[object Object],[object Object],[object Object],Zend_ Session  2.0
[object Object],[object Object],[object Object],[object Object],Zend_ View  2.0
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Другие элементы
[object Object],[object Object],[object Object],[object Object],[object Object],GIT  вместо  Subversion
Стандарты кодирования Псевдонимы   пространств   имен use  Zend P ubsub Provider  as  Provider ;  Псевдонимы  (alias)  назначаются при использовании " use " : ,[object Object],[object Object],use  Zend Filter ;  // Псевдонимом будет "Filter"   use Zend Form Element ;  // Псевдонимом будет "Element"   ,[object Object],[object Object],[object Object],// Псевдоним "HelperBroker" use  Zend Controller Action HelperBroker ;    // Добавляя суффикс   use Zend Filter Int  as  IntFilter ;          
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Стандарты кодирования
[object Object],[object Object],Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)Mikhail Davydov
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПzfconfua
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodePositive Hack Days
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoIlya Shalyapin
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4Technopark
 

Was ist angesagt? (20)

ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
Problems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source CodeProblems of Automated Generation of Exploits on the Basis of Source Code
Problems of Automated Generation of Exploits on the Basis of Source Code
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4
 

Andere mochten auch

Mailrouting t shootingfinal
Mailrouting t shootingfinalMailrouting t shootingfinal
Mailrouting t shootingfinaldaimar1
 
Sistema endócrino
Sistema endócrinoSistema endócrino
Sistema endócrinoVictor Hugo
 
C++ Efficient medicine transfer
C++ Efficient medicine transfer C++ Efficient medicine transfer
C++ Efficient medicine transfer cheeyuan
 
Consciousness Hacking - Algemene Presentatie
Consciousness Hacking - Algemene PresentatieConsciousness Hacking - Algemene Presentatie
Consciousness Hacking - Algemene PresentatieYfke Laanstra
 
Fundamentos da educação especial inclusiva
Fundamentos da educação especial inclusivaFundamentos da educação especial inclusiva
Fundamentos da educação especial inclusivaGeisse Martins
 
新增Microsoft power point 簡報 (3)
新增Microsoft power point 簡報 (3)新增Microsoft power point 簡報 (3)
新增Microsoft power point 簡報 (3)winging44
 
Chamber presentation
Chamber presentationChamber presentation
Chamber presentationSandy Chamber
 
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)TDR d.o.o Rovinj
 
השגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאותהשגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאותhaimkarel
 
Comision mixta abril11
Comision mixta abril11Comision mixta abril11
Comision mixta abril11oscargaliza
 
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...Kalle
 
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinu
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinuTDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinu
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinuTDR d.o.o Rovinj
 
Acta%20 ci%20junio%202011
Acta%20 ci%20junio%202011Acta%20 ci%20junio%202011
Acta%20 ci%20junio%202011oscargaliza
 

Andere mochten auch (20)

Mailrouting t shootingfinal
Mailrouting t shootingfinalMailrouting t shootingfinal
Mailrouting t shootingfinal
 
Aws
AwsAws
Aws
 
Sistema endócrino
Sistema endócrinoSistema endócrino
Sistema endócrino
 
TEMA2AVocabulary
TEMA2AVocabularyTEMA2AVocabulary
TEMA2AVocabulary
 
C++ Efficient medicine transfer
C++ Efficient medicine transfer C++ Efficient medicine transfer
C++ Efficient medicine transfer
 
Tema 5B The Verb VENIR
Tema 5B The Verb VENIRTema 5B The Verb VENIR
Tema 5B The Verb VENIR
 
Consciousness Hacking - Algemene Presentatie
Consciousness Hacking - Algemene PresentatieConsciousness Hacking - Algemene Presentatie
Consciousness Hacking - Algemene Presentatie
 
Fundamentos da educação especial inclusiva
Fundamentos da educação especial inclusivaFundamentos da educação especial inclusiva
Fundamentos da educação especial inclusiva
 
新增Microsoft power point 簡報 (3)
新增Microsoft power point 簡報 (3)新增Microsoft power point 簡報 (3)
新增Microsoft power point 簡報 (3)
 
Chamber presentation
Chamber presentationChamber presentation
Chamber presentation
 
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)
TDR - inovator i regionalni lider (Kanfanar, 17.06.2010.)
 
Digital pr & Web Reputation
Digital pr & Web ReputationDigital pr & Web Reputation
Digital pr & Web Reputation
 
Replacing Rounds PSA Stonaker
Replacing Rounds PSA StonakerReplacing Rounds PSA Stonaker
Replacing Rounds PSA Stonaker
 
השגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאותהשגת רציפות טריטוריאלית במלחמת העצמאות
השגת רציפות טריטוריאלית במלחמת העצמאות
 
Comision mixta abril11
Comision mixta abril11Comision mixta abril11
Comision mixta abril11
 
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...
Hennessey An Open Source Eye Gaze Interface Expanding The Adoption Of Eye Gaz...
 
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinu
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinuTDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinu
TDR - predstavljanje rezlultata poslovanja na tržištu BiH za 2012 godinu
 
Acta%20 ci%20junio%202011
Acta%20 ci%20junio%202011Acta%20 ci%20junio%202011
Acta%20 ci%20junio%202011
 
แบบนำเสนอผลงานวิชาการ
แบบนำเสนอผลงานวิชาการแบบนำเสนอผลงานวิชาการ
แบบนำเสนอผลงานวิชาการ
 
ความสัมพันธ์ทางเศรษฐกิจ
ความสัมพันธ์ทางเศรษฐกิจความสัมพันธ์ทางเศรษฐกิจ
ความสัมพันธ์ทางเศรษฐกิจ
 

Ähnlich wie ZFConf 2010: What News Zend Framework 2.0 Brings to Us

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиSQALab
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
Psgi app
Psgi appPsgi app
Psgi appund3f
 

Ähnlich wie ZFConf 2010: What News Zend Framework 2.0 Brings to Us (20)

Yserver
YserverYserver
Yserver
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
The Best Portlet
The Best PortletThe Best Portlet
The Best Portlet
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Psgi app
Psgi appPsgi app
Psgi app
 

Mehr von ZFConf Conference

ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)ZFConf Conference
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf Conference
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)ZFConf Conference
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...ZFConf Conference
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf Conference
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)ZFConf Conference
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf Conference
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...ZFConf Conference
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ruZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ruZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend FrameworkZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend FrameworkZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf Conference
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)ZFConf Conference
 

Mehr von ZFConf Conference (20)

ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
 
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
ZFConf 2012: Capistrano для деплоймента PHP-приложений (Роман Лапин)
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ruZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend FrameworkZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
 

ZFConf 2010: What News Zend Framework 2.0 Brings to Us

  • 1. Что несёт нам Zend Framework 2.0? Надежда Блинова , веб-программист , Wizartech Георгий Туревич , ведущий веб-программист , Wizartech 27 марта 2010 г. Санкт-Петербург
  • 2.
  • 3.
  • 4.
  • 5. Изменения в архитектуре Унифицированный конструктор public function  setOptions ( $options ) { // ...      foreach ( $options  as  $key  =>  $value ) {          $method  =  'set'  .  $key ;         if ( method_exists ( $this ,  $method )) {              $this -> $method ( $value );         }     }     return  $this ; } Во многих компонентах в методе setOptions часто встречается повторяющийся код:
  • 6. Изменения в архитектуре Унифицированный конструктор namespace  Z end ; // Новый, общий для всех класс Options c методом setOptions   class  Options  {      public static function  setOptions ( $object , array  $options )      {          if (! is_object ( $object )) {              return;          }          foreach ( $options  as  $key  =>  $value ) {               $method  =  'set'  .  self :: _normalizeKey ( $key );              if ( method_exists ( $object ,  $method )) {                   $object -> $method ( $value );              }          }      }        public static function  setConstructorOptions ( $object ,  $options )      {     ...     }        protected static function  _normalizeKey ( $key )      {  ...     }  } 
  • 7. Изменения в архитектуре Унифицированный конструктор namespace  Z end ;  class  Options  {      public static function  setOptions ( $object , array  $options )      {  ...   }        public static function  setConstructorOptions ( $object ,  $options )      {             if ( $options  instanceof  Zend_Config ) {               $options  =  $options -> toArray ();          }          if ( is_array ( $options )) {               self :: setOptions ( $object ,  $options );          }      }        protected static function  _normalizeKey ( $key )      {           $option  =  str_replace ( '_' ,  ' ' ,  strtolower ( $key ));           $option  =  str_replace ( ' ' ,  '' ,  ucwords ( $option ));          return  $option ;       }  } 
  • 8. Изменения в архитектуре Унифицированный конструктор use  Z end Options  as  Options ;  class  Foo  {      public  $bar  =  '' ;      public  $baz  =  '' ;         public function  __construct ( $options  =  null )      {           Options :: setConstructorOptions ( $this ,  $options );      }      public function  setOptions (array  $options )      {           Options :: setOptions ( $this ,  $options );      }      public function  setBar ( $value )      {           $this -> bar  =  $value ;      }        public function  setBaz ( $value )      {           $this -> baz  =  $value ;      }  } 
  • 9. Изменения в архитектуре Унифицированный конструктор   $foo  = new  Foo (array( 'bar'  =>  'baz' ));  echo  $foo -> bar ;  // "baz"    $foo -> setOptions (array( 'bar'  =>  'boo' ,  'baz'  =>  'bat' ));  echo  $foo -> bar  .  $foo -> baz ;  // "boobat" 
  • 10.
  • 11. Изменения в архитектуре Exceptions. Исключения // у каждого компонента должен быть свой интерфейс Exception namespace Foo Bar ;  interface  Exception  {  }    class  InvalidArgumentException       extends InvalidArgumentException       implements  Exception  {  }    try {      throw new  InvalidArgumentException ();  } catch (Foo Bar Exception $e ) {  } 
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. Zend_Controller 2.0 Event-driven Model: PubSub class  TestPubSub {     public function  someFunction ( $message )     {         echo( 'someFunction: '  .  $message );     }          public function  anotherFunction ( $message )     {         echo( 'anotherFunction: '  .  $message );     }     } $classObject  = new  TestPubSub (); $providerObject  = new  Provider (); $outerFunction  = function ( $message ) {     echo( 'outerFunction: '  .  $message ); }; 
  • 33. Zend_Controller 2.0 Event-driven Model: PubSub $ someFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $classObject ,  'someFunction' ); $ anotherFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $classObject ,  'anotherFunction' ); $ outerFunctionHandle = $ providerObject -> subscribe ( 'mvc.routing' ,  $outerFunction ); $providerObject -> publish ( 'mvc.routing' ,  'Join the Dark Side!' ); $providerObject -> publish ( 'mvc.routing' ,  'We have cookies!' ); $providerObject -> unsubscribe ( $ someFunctionHandle ); echo( '--- Производим unsubscribe функции someFunction ---' ); $providerObject -> publish ( 'mvc.routing' ,  'Join the Dark Side!' ); $providerObject -> publish ( 'mvc.routing' ,  'We have cookies!' );
  • 34. Zend_Controller 2.0 Event-driven Model: PubSub someFunction:  Join the Dark Side! another Function:  Join the Dark Side! outer Function:  Join the Dark Side! someFunction:  We have cookies! another Function:  We have cookies! outer Function:  We have cookies! --- Производим unsubscribe функции someFunction --- another Function:  Join the Dark Side! outer Function:  Join the Dark Side! another Function:  We have cookies! outer Function:  We have cookies!
  • 35.
  • 36. Zend_Controller 2.0 Event-driven model routing :      ...   dispatching :       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.pre' ,  $e );       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching' ,  $e );       $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.post' ,  $e );       $e -> setState ( 'response' );    response :      ...   error :       $pubsub -> publishUntil ( $stateChanged ,  'mvc.error' ,  $e );  Определяется 4 состояния :
  • 37. Zend_Controller 2.0 Event-driven model // $stateChanged – замыкание, проверяющее состояние события dispatching :      $e -> markState ();      $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.pre' ,  $e );     if ( $e -> isStateChanged ()) {         goto  switchState ;     }      $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching' ,  $e );     if ( $e -> isStateChanged ()) {         goto  switchState ;     }      $pubsub -> publishUntil ( $stateChanged ,  'mvc.dispatching.post' ,  $e );     if ( $e -> isStateChanged ()) {         goto  switchState ;     }      $e -> setState ( 'response' );
  • 38. Zend_Controller 2.0 Event-driven model switchState :     switch ( $e -> getState ()) {         case  'routing' :             goto  routing ;         case  'dispatching' :             goto  dispatching ;         case  'response' :             goto  response ;         case  'error' :             goto  error ;         default:             throw new  StateException ();     }  
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53. Zend_ Form 2.0 Будет использоваться так: $chain -> isValid ( $values );  $value  =  $chain -> get ( $key );  $chain -> set ( $key ,  $value );  $chain -> setAll ( $values );  $elementChain  =  $chain -> getChain ( $key );  Рекомендации: работа с цепочками фильтров и валидаторов
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.