Retour sur le PHP Forum 2015 – Jour 1

Mieux vaux tard que jamais, j’ai récupéré et mis au propre mes petites notes que j’ai prises lors des différentes conférences. J’étais donc présente au PHPForum 2015 organisé par l’AFUP, et qui célébrait deux évènements, et pas des moindres :

  • les 15 ans de l’AFUP
  • et surtout, les 20 ans de PHP.

20 ans que PHP a pu faire son bonhomme de chemin, et persévérer avec ses forces et ses faiblesses.

Je profite d’un petit edit pour partager la vidéo spéciale « anniversaire PHP » qui a été diffusée pendant la keynote d’ouverture, si vous regardez bien j’y apparais 🙂

 

Parmi le panel de choix des différentes conférences, voici celles auxquelles j’ai assisté :

Symfony 3.0  est sorti ! – Nicolas Grekas

Cette saison est la saison du renouveau pour les Fraworks majeurs, tels que Symfony ou Zend Framework. Cette nouvelle version tient une promesse de rétrocompatibilité. Il suffit d’utiliser Composer pour autoriser l’update.
Pour rappel, un numéro de version se compose comme suit : Major.Minor.Patch. L’incrément du numéro majeur est susceptible de casser la compatibilité. Le mineur ne s’incrémente qu’à chaque nouvelle feature. Le Patch est fixe.
Symfony 3 n’est pas une version LTS. Elle est basée sur le code de Symfony 2.8, et PHP 5.5.9 minimum est requis. La backward-compatibility a été gardée, les lignes de code ont été réduites.

Mon avis : une bonne mise en bouche pour commencer le Forum, même si je suis plus adepte de ZF2, et moins férue de Symfony. Bien contente d’apprendre que le code de cette nouvelle version ne donnera que peu d’incompatibilités par rapport à la précédente. Il en est de même pour ZF2 d’ailleurs.

Les flux, méconnus et sous-utilisés – Pascal Martin

Ici, Pascal Martin nous rappelle l’immense utilité des fonctions PHP telles que file_get_contents, file_put_contents, fopen, fgets, fseek … mais également tempnam, tmpfile.

Un flux est tout simplement une ressource streamable, et ces ressources sont gérées depuis PHP 4.3.

Il existe une bibliothèque de fonctions stream_* qui permettent également de manipuler les flux.

Pour appeler un flux, il suffit juste de l’appeler via la syntaxe appropriée : schema://cible

Il est conseillé de créer un flux pour tester des accès à fichiers, au lieu de créer directement le fichier sur le disque. Cette manipulation permet, avec une bonne pratique, de passer outre CURL.

Pascal a également évoqué reactphp.org et icicle.io pour les scripts asynchrones.

Mon avis : Très intéressant. On a tendance à oublier l’existence des flux, au profit des manipulations avec CURL. Pascal Martin a fait d’ailleurs un dossier très intéressant à ce sujet sur son site.

PHP7 Story – Zeev Suraski

Ici, un des principaux « cores PHP développers » revient sur la conception de PHP7.

Il faut savoir qu’une version majeure de PHP sort tous les 5 ans, sauf pour PHP6, qui est mort-né officiellement le 11 mars 2010 à 11:09:37. Pour rappel, il devait gérer avec unicité l’encodage des caractères (PHP + unicode).

Depuis, il y a eu HHVM, un runtime PHP crée par Facebook. La réponse de Zend, PHPNG (PHP New Generation) a été crée en janvier 2014, avec comme promesse un PHP plus rapide, et plus performant.

PHP7 est donc sorti avec des nouveautés, hormis la rapidité qui est flagrante on a :

  • Plus de gestion d’erreur E_ERROR
  • Déclaration des types scalaires de paramètres ET de retour dans les fonctions
  • Fonction userialize : on peut mettre des filtres noms de fonctions
  • « Spaceship opérator »

Mon avis : quoi de mieux qu’un des principaux acteurs de PHP pour nous présenter cette nouvelle version ? La conférence était incontournable, aussi incontournable que la multitude de ElePHPants sur le diaporama.

Mets du ValueObject dans ton modèle – Alexandre Damien

Qu’est-ce que le Domain Driven Design ? Il s’agit en fait d’un ensemble de pratiques fondées sur la collaboration entre experts fonctionnels : dedans il y a une notion de ValueObject. C’est un objet qui continent des données. Il n’a pas d’identité, il n’est pasimmutable. Son identité est basée sur le contenu, l’objet a une vie, se manipule, se supprime, se consomme …

Il se base sur le principe de « Simple Responsibility ».

On compare les VO avec == et non pas === qui va se baser sur la référence mémoire de l’objet. Ou avec une méthode isEqual().

ON NE DOIT PAS CHANGER LE CONTENU. Pour changer de contenu, il faut créer une nouvelle instance d’objet.

Pour rendre immutable :
– Mettre les variables dans la classe en privé
– Mot-clé final dans la déclaration de la classe (= no extends)
– Constructeur vide et privé. Utiliser un constructeur nommé en statique.
– Empêcher les autres devs d’implémenter des setters

Avec Doctrine :
– Utiliser Embeddable (nouvelle fonctionnalité) et le type object

Mais malgré tout, le Value Object a des inconvénients :

  • On ne peut pas requêter sur les champs de VO
  • On ne peut pas non plus le sérialiser correctement

Mon avis : Conférence tournée avec beaucoup d’humour, un sujet qu’on n’a pas souvent l’habitude d’aborder dans son propre code. Ce pattern a pourtant bien des avantages.

Performance Testing for Modern Apps – Dustin Whittle

A partir d’une seconde de chargement d’une page web, l’attente se fait sentir. Il ne faut pas passer au-delà.

Pour pouvoir vérifier le temps de chargement d’une page, des outils sont à dispostion :

  • Apache Bench  – ab -c 10 -t 10 -k http://monsiteatester.com/
  • Siege – siege -c 10 -b -t etc …
  • Bees with machine guns – bees attack -n 1000 -c 50 -u http://monsiteatester.com/
  • locust.io
  • PageSpeed Tools de Google.
  • Google Developpers
  • webpagetest.org
  • sitespeed.io
  • Test for failures : simian army + chaos monkey

Halte à l’anarchitecture – Gauthier Delamarre

Ici Gauthier Delamarre revient sur les principales architectures logicielles, dont la réalisation peut être abstraite dans un premier temps.

Il faut distinguer la macro et la micro architecture.

La macro architecture va concerner :

  • Le schéma général : Couches applicatives, workflows, acteurs tiers.
  • Les responsabilités : validation de données, mécanismes ACL, gestion d’erreur.
  • Les structures diverses : modèles de données, organisation des sources, et des ressources
  • Et surtout, la DOCUMENTATION !

Quant à la micro architecture, elle va concerner :

  • Les données métiers : systèmes d’objets, entités, formats d’échanges
  • Les services : injections, événements, tests
  • Les composants : accès aux données, persistance, User Interface

Zoom sur les objets PHP – Julien Pauli

Toute variable en PHP, va créer une Zval.  Les Zvals sont des « conteneurs » écrits en C. PHP utilise ces conteneurs pour stocker des tableaux, etc … Dans ces Zvals, on y trouve un élément « refcount », qui  s’incrémente à chaque occurrence de la même instance.

En PHP, un Handler est un entier utilisé pour référencer l’objet d’une manière unique. On peut le faire apparaître quand on fait un var_dump. Les handlers sont utilisés lors de l’implémentation des interfaces ArrayAccess, Serializable, Countable.

Les objets, s’ils sont des variables, ne sont pas des références.

Le Garbage Collector, lui, ne sert que pour les références « circulaires » quand deux objets se référencent les uns les autres (zvals seulement). gc_collect_cycles() permet de vider ce cache.

Julien nous rappelle également qu’une classe c’est lourd, donc il est préférable utiliser l’autoloading.

SimpleXMLElement, PDOStatement, Datetime utilisent des Object handlers.

Le destructeur d’une classe ne libère pas la mémoire tout de suite. Il est recommandé de faire unset() si on veut supprimer l’objet et sa mémoire. Un destructeur qui « plante » va entrainer la désactivation de tous les autres destructeurs car le script va être considéré comme pas stable.

Mon avis : un petit voyage dans le comportement même de PHP. Un sujet qui commence à me titiller d’ailleurs. Il est souvent intéressant de s’initier à la grammaire d’un langage informatique.

Unglue all the things – Beau Simenson

Utilisés comme des services, les controleurs sont plus portables.

Beau Simenson fait également référence à Puli, qui est un nouvel outil de packages. Le système de séparation en sous-arborescences permet une manipulation plus facile, chaque répertoire contient de multiples packages.

Le modèle sera toujours influencé par l’ORM.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *