Your SlideShare is downloading. ×
0
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
2013 01-08-php-maturite
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

2013 01-08-php-maturite

475

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
475
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PHP : l’âge de la maturité avec Symfony2 ? Rémi Alvado remi.alvado@gmail.com remi.alvado @remialvado http://blog.shoppingadventure.fr/developers
  • 2. Rappel des faits Autre Java 1% Unknown 4% 6% ASP.Net 19 % PHP PHP 94 % 76 %Répartition des technologies utilisées sur les 1M Répartition des technologies utilisées sur lesplus gros sites (source : W3Techs) CMS totalisant plus de 1% du marché chacun (source : W3Techs) 2
  • 3. Pr é - H i s t o i r ePHP 1.0 : 1995PHP 2.0 : 1997PHP 3.0 : 1998 Premières briques d’un modèle objetPHP 4.0 : 2000 Premier modèle objet « utilisable » Introduction du Zend Engine Command Line InterfacePHP 5.0 : 2004, PHP 5.1 : 2005 & PHP 5.2 : 2006 5.0 : Révision du modèle objet 5.1 : Amélioration des performances 5.2 : Introduction de PDO et JSON 3
  • 4. Language Namespaces & PSR-0 Equivalent à la notion de « package » de Java Permet le chargement automatique des class Annotations Non intégré directement au langage Implémenté par des librairies externes basées sur l’API Reflection/** Callable * @Route(‘/{id}.html’, requirements={‘id’ = ‘d+’}, default={‘id’ = 1}) * @Method({‘GET’, ‘HEAD’}) Equivalent aux « closures » de nombreux langages * @Template(‘blog/show.html.twig’) */$nbTests = 0;public function showAction($id) ([^"]*)’),$steps->Given(‘/I have ordered{ Futur de PHP function($world, $arg1) use ($nbTests) {} $nbTests++; PHP 5.4 : Traits, built-in webserver, … throw new BehatBehatExceptionPendingException(); }); PHP 5.5 : générateurs, coroutines, accesseurs, … 4
  • 5. Qualité de code Composer Equivalent à Maven pour la partie dépendance Configuration extrêmement simple en JSON{ PHPUnit / Hamcrest / Mockery "require": { "name": "kbrw/riak-bundle", "type": "symfony-bundle", ”symfony/symfony": ”2.1.*” } Support des assertions classiques, des annotations basiques, "description": "Allows your application to intereact with Riak datastorage",} des mocks, de la couverture de code, d’une grande partie "keywords": ["webservice","nosql","ODM"], "homepage": "https://github.com/remialvado/RiakBundle", des matchers Hamcrest, … "license": "Apache",$ curl –s https://getcomposer.org/installer | php "authors": [$ composer install<?php { Travis–CI / JMS Automatic Code reviewrequire_once "name": "Remi Alvado", SomeClass.php; "email": "remi.alvado@gmail.com" } Serveur de CI utilisé par de nombreux projets PHPclass StubTest extends PHPUnit_Framework_TestCase{ ], Réalisation d’audits automatiques sur le code source "require": { public function testOnConsecutiveCallsStub() { "php": ">=5.3.2”, "guzzle/guzzle": "3.0.*", $stub = $this->getMock(SomeClass); Intégration aisée avec Git(hub) "jms/serializer-bundle": "1.0.*" $stub->expects($this->any()) } ->method(doSomething)} ->will($this->onConsecutiveCalls(2, 3, 5, 7)); $this->assertEquals(2, $stub->doSomething()); assertThat($stub->doSomething(), is(3)); }} 5
  • 6. We b s e r v i c e<?phpnamespace BoilerplateSerializerBundle; Guzzleuse JMSSerializerAnnotation as Ser; Abstraction objet sur curl/** Fortement guidé par les principes REST * @XmlRoot("book") */class function searchBooks($query, $tags = array(), $rows = 10, $offset = 0, $sort = "desc")publicBook{ JMS Serializer /** $client = new Client( Equivalent allégé à JAXB * @SerType("string") "http://localhost:9980/books/{q}{?rows,offset,sort,tags*}", */ array( Fonctionne avec XML, JSON et YAML protected $name; => $query, "q" "rows" => $rows, /** "offset" => $offset, Support des annotations Doctrine * @SerType("DateTime") "sort" => $sort, * @SerXmlAttribute $tags "tags" => * @SerSerializedName("publication") ) */ ); protected $publishedDate; $client->setDefaultHeaders([accept => application/xml]);} $request = $client->get(); echo $request->getUrl(); $response = $request->send();<?xml version="1.0" encoding="UTF-8"?> echo $response->getBody();<book publication="2013-01-08 19:30:00">} <!CDATA[PHP : l’âge de la maturité avec Symfony2 ?]]></book>searchBooks("Star Wars", [cat => novel, country => en-US]);{"name":"PHP : l’âge de la maturité avec Symfony2 ?","publication":"2013-01-08 19:30:00"}// http://localhost:9980/books/Star+Wars?rows=10&offset=0&sort=desc&cat=novel&country=en-US// ... 6
  • 7. StockageDoctrine / Propel Equivalent d’Hibernate Doctrine 1 / Propel => Active Record pattern Génération de code à partir d’une configurationPHPCR ODM Basé sur Java Content Repository Intégré dans Doctrine 2 Encore à l’état de prototypeRiakBundle Communication avec Riak Intégration complète à Symfony2 Utilisation de composer, Travis-CI, JMS Automated Code Review, … 7
  • 8. DiversAssetic : web assetsTwig : templating languageSismo : micro Continuous Integration serverSilex : micro web frameworkPimple : micro Dependency Injector containerGeocoderGoutte : web scraperMonolog : gestion de logs… 8
  • 9. Conclusion Pimple Dependency Injection Namespace Hamcrest Travis-CI Doctrine Monolog JMS Serializer Built-in webserverPHPCR RiakBundle Sismo geocoder PHPUnit Coroutines Goutte github Symfony2 Autoloader DOM Crawler Guzzle Annotations Code review Behat Trait Propel PSR Generator Composer Silex Mockery Twig ESI Assetic Console Event-base development 9

×