as novidades do PHP eo Zend Framework 2
Elton Minetto Graduado/pós-graduado em Ciência da Computação Desenvolvedor desde 1997 Professor desde 2004 Autor de dois livros sobre PHP Sócio da Coderockr Instrutor do Code Squad
PHP
Namespaces
<?php namespace CoreService; use ZendHttpClient as HttpClient; use ZendHttpRequest; class Auth { public function __construct($apiKey, $apiUri, $rpcUri)   {   $this->httpClient = new HttpClient(); } }
Traits
trait Veiculo { public function rodar(){ /* x */ } } trait Aeronave { public function voar(){ /* x */ } } trait Brinquedo { private $pedagogico; public function isPedagogico(){ return $this->pedagogico; } }
class Carrinho { use Veiculo, Brinquedo; } class Aviaozinho { use Aeronave, Brinquedo; } class Helicoptero { use Aeronave; } class TanqueDeGuerra { use Veiculo; }
Servidor embutido
php -S localhost:8080 -t /var/www/projeto
PSR
PSR - 0: regras de autoloader de classes PSR - 1: regras básicas de codificação PSR - 2: regras avançadas de codificação
Composer
Ferramenta que facilita a instalação e atualização de dependências
Funções anônimas
public function getServiceConfig() { return array( 'factories' => array( 'Cache' => function($sm) { $config = include __DIR__ . 'config.php'; $cache = StorageFactory::factory( array( 'adapter' => $config['cache']) ); return $cache; } ), ); }
Frameworks
Uma base de onde pode-se desenvolver algo maior ou mais específico. É uma coleção de códigos, classes, funções, técnicas e metodologias que facilitam o desenvolvimento de novos softwares.
Zend Framework 2
Desenvolvido pela Zend junto com a comunidade PHP Mais de 2 anos de desenvolvimento Mais de 200 profissionais envolvidos Apoio Google, Microsoft, entre outras
Vantagens
Usa recursos mais avançados do PHP 5.3.3 em diante
Processo de contribuição mais simples Pull-requests no Github Não precisa assinar termos
Fácil instalação e atualização via Composer
No more magic! Tudo é mais explícito, fácil de manter e testar
//ZF1 class IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->message = “Hello World”; } } Onde foi definido?
//ZF2 namespace ApplicationController; use ZendViewModelViewModel; use ZendMvcControllerAbstractActionController; class Index extends AbstractActionController { public function indexAction() { return new ViewModel( array('message' => “Hello World”) ); }
Fácil integração com frameworks e componentes compatíveis com o PSR-0 e Composer (Symfony, Doctrine, Monolog, etc)
Desvantagens
Pouca documentação
Módulos
"[] um módulo é uma coleção de código e outros arquivos que resolve um problema específico de uma aplicação ou site." Mattew O'Phinney. Zend Framework project leader
Totalmente reutilizáveis Dezenas de módulos desenvolvidos no http://modules.zendframework.com
Eventos
Como introduzir logs e debugs no códido da aplicação? Como introduzir cache na aplicação como um todo? Como introduzir validações, filtros, ACL? Soluções: traits (somente PHP 5.4), PubSub pattern, eventos
Um EventManager é um objeto que agrega listeners para um ou mais eventos e que gera (trigger) outros eventos. Um listener é uma função/método (callback) que reage a um evento
Injeção de dependências
class User { protected $storage; public function __construct() { $this->storage = new SessionStorage(); } } $user = new User(); Difícil de customizar Fácil de usar
class User { protected $storage; public function __construct($storage) { $this->storage = $storage; } } Fácil de customizar $storage = new SessionStorage() $user = new User($storage); Mais difícil de usar
//formas de injeção de dependências $storage = new SessionStorage(); //injeção pelo construtor $user = new User($storage); //injeção usando setters $user = new User(); $user->setStorage($storage); //injeção por propriedade $user = new User(); $user->storage = $storage;
ServiceManager
"[] é um registro, ou container que armazena os vários objetos necessários para a sua aplicação[] armazena a informação necessária para instanciar estes objetos conforme forem necessários [] é um gerenciador de objetos, ou gerenciador de instâncias." Evan Coury, software engineer.
/** * Retorna a configuração do service manager do módulo * @return array */ public function getServiceConfig() { return array( 'factories' => array( 'ApplicationServiceAuth' => function($sm) { $dbAdapter = $sm->get('DbAdapter'); return new ServiceAuth($dbAdapter); }, ), ); } //uso em um controller $auth = $this->getServiceManager()->get('Application ServiceAuth');
MVC
Tudo é um evento Controllers são serviços
Referências
http://www.slideshare.net/weierophinney/zend- framework-20-patterns-tutorial http://www.slideshare.net/fabpot/dependency- injectionzendcon2010 http://diogobesson.com.br/programacao/php-traits/ http://code-squad.com/screencast/composer http://mwop.net/blog/267-Getting-started-writing- ZF2-modules.html http://static.zend.com/topics/ZF2-Getting-
Contato
@eminetto http://www.eltonminetto.net http://coderockr.com http://code-squad.com

Introdução ao Zend Framework 2