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 ); };
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!