nAcademy Le 26 février 2015 Neuros -
PHP 7
Think php7
Christophe Villeneuve
nAcademy Le 26 février 2015 Neuros -
Aujourd'hui...
● Situation actuelle
● Le futur
● PHP 7
Thank's Rasmus Lerdorf
2015
20 ans PHP
nAcademy Le 26 février 2015 Neuros -
Situation actuelle
Picture hellosct1 : Pyramide elePHPant
nAcademy Le 26 février 2015 Neuros -
➢
PHP 5.2 ✔
The END 2010
PHP (1/6)
nAcademy Le 26 février 2015 Neuros -
➢PHP 5.2
➢PHP 5.3
✔ De 2009 à Août 2014
✔ ChangeLog
✔ Namespace
✔ Etc.
PHP (2/6)
nAcademy Le 26 février 2015 Neuros -
➢PHP 5.2
➢PHP 5.3
➢PHP 5.4
✔Dispo Mars 2012
✔ChangeLog
✔ Les traits
✔ Etc.
PHP (3/6)
nAcademy Le 26 février 2015 Neuros -
➢PHP 5.2
➢PHP 5.3
➢PHP 5.4
➢PHP 5.5
✔ Dispo juin 2013
✔ ChangeLog
✔ Générators
✔ OpCache
✔ Principalement la sécurité
PHP (4/6)
nAcademy Le 26 février 2015 Neuros -
➢PHP 6.0
✔ No Comment
Screen Hidden
nAcademy Le 26 février 2015 Neuros -
➢PHP 5.2
➢PHP 5.3
➢PHP 5.4
➢PHP 5.5
➢PHP 5.6
✔ Dispo Août 2014
✔ Variadics
✔ Function fn ($id,$params);
✔ Splat Operator
✔ Function test (arg1,
arg2=null)
✔ Operator
✔ echo 2 xx 3 ; // 8
✔ Nice speed bump
✔ Etc.
PHP (5/6)
nAcademy Le 26 février 2015 Neuros -
➢PHP 5.2
➢PHP 5.3
➢PHP 5.4
➢PHP 5.5
➢PHP 5.6
✔ Dispo Septembre 2015
✔ Next changeLog
✔ ...
➢PHP 5.7
PHP (6/6)
nAcademy Le 26 février 2015 Neuros -
+ =
5 + 1 = 7
nAcademy Le 26 février 2015 Neuros -
PHP Alternative Implementations
Source : https://wiki.php.net/rfc/php7_57_roadmap
●
PHP 7
– PHP Next Generation (PHPNG)
●
HHVM
– Code natif
●
Recki-ct
– Code natif
●
Phalanger
– .net engine
nAcademy Le 26 février 2015 Neuros -
Roadmap
Source : https://wiki.php.net/rfc/php7_57_roadmap
nAcademy Le 26 février 2015 Neuros -
Les changements
? yes
A whale
(Une baleine)
Picture hellosct1 : Tadoussac 2011 – elePHPant VS whale
nAcademy Le 26 février 2015 Neuros -
Features
● :-D
– PHP Next Generation
– Modification structure
données
– Nouvelle gestion de
mémoire
– Etc
● :-(
– Ext/MySQL
– Ext/ereg
– ASP Style Tags
<% ou <%= et %>
– Etc.
:-( Source : https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
nAcademy Le 26 février 2015 Neuros -
●
Structure intermédiaire dans le process de compilation
→ gain de performance et au niveau mémoire
●
Améliore la qualité du code
●
Position avant OpCode
<?php
//aucun
Source : https://wiki.php.net/rfc/abstract_syntax_tree
Abstract syntax tree
nAcademy Le 26 février 2015 Neuros -
Null Coalesce Operator
● Modifie le comportement de l'opérateur ?
→ fonction isset() en automatique
● Disponible
– Dans une chaîne
– Dans un appel de méthode / fonction
<?php
//Avant
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
//PHP 7.0
$username = $_GET['user'] ?? 'nobody';
Source : https://wiki.php.net/rfc/isset_ternary
nAcademy Le 26 février 2015 Neuros -
Unicode Codepoint Escape Syntax
● Utilisation de séquences Unicode dans les chaînes
de caractères
● { et } ← code de caractères
lisibilité + pas de limite au nombre de caractères
Source : https://wiki.php.net/rfc/unicode_escape
<?php
echo "u{202E}Reversed text"; // outputs Reversed text
echo "mau{00F1}ana"; // pre-composed character ñ
echo "manu{0303}ana"; // "n" with combining ~ character (U+0303)
nAcademy Le 26 février 2015 Neuros -
Introduce session_start()
● Ajout d'une option
● Lecture seule
– Un moyen rapide de lire les données de la session lorsque la mise à jour
n'est pas nécessaire
● Ecriture en option
– Les données ne sont pas écrites si elles sont identiques
Source : https://wiki.php.net/rfc/session-lock-ini
<?php
session_start(array('lazy_write'=False));
nAcademy Le 26 février 2015 Neuros -
Catchable
● 'call to a member function of a non-object'
● Pour éviter d'obtenir une erreur non-fatale
– E_RECOVERABLE_ERROR
● Cela se produit à chaque fois qu'une méthode est
appelée sur autre chose qu'un objet
Source : https://wiki.php.net/rfc/catchable-call-to-member-of-non-object
<?php set_error_handler(function($code,$message) {
var_dump($code, $message);
});
$x= null;
var_dump($x->method());
echo "Aliven";
nAcademy Le 26 février 2015 Neuros -
Uniform variable Syntax
● Uniformisation de la Syntax variable
● But : Atteindre la sémantique pour certaines
constructions variables
Source : https://wiki.php.net/rfc/uniform_variable_syntax
// old // new
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
nAcademy Le 26 février 2015 Neuros -
Return Type Declarations
● Possibilité de spécifier un type de retour
→ pour les fonctions et méthodes
Source : https://wiki.php.net/rfc/return_types
<?php
// retourne toujours un tableau
function foo(): array {
return [];
}
nAcademy Le 26 février 2015 Neuros -
Named parameters
● Nommés les paramètres
● Exemple
// Remplit un tableau avec une même valeur
array_fill(start, num, value)
Source : https://wiki.php.net/rfc/named_params
<?php
// Actuellement
array_fill(0, 100, 42);
// Possibilité
array_fill(start_index => 0, num => 100, value => 42);
// ou
array_fill(value => 42, num => 100, start_index => 0);
nAcademy Le 26 février 2015 Neuros -
Et...
● Beaucoup d'autres…. RFC…. pour PHP 7.0
https://wiki.php.net/rfc#php_70
Picture PHPather Spirituel : Vincent Pontier aka EL Roubio
nAcademy Le 26 février 2015 Neuros -
Features en cours (Votes/Discussions)
● Exceptions in the engine (for PHP 7)
– Permettre la levée d'exceptions depuis le moteur de
PHP
● Remove PHP 4 Constructors
– Liés aux constructeurs. Depuis php5 →__construct()
● Expectations
– Identifier les problèmes en Dev ( basé sur assert() )
● Array to string conversion
– Convertir un Array en String
nAcademy Le 26 février 2015 Neuros -
Performance
Picture EL Roubio – http://www.elroubio.net
nAcademy Le 26 février 2015 Neuros -
Configuration
●
VM Debian 7 1GB RAM, 1 core, SSD
ulabox.com symfony 2 index / product page
PHP 5.5 / 5.6 / 7.0
opcache.validate_timestamps = 0
opcache.enable_file_override = 1
HHVM 3.5
Hhvm.server_stat_cache = 1
No extensions! (APCu)
Nginx, Redis, Solr, MySQL
Source 31/01/2015 : https://speakerdeck.com/acasademont/php7-at-php-day-spain-2015
nAcademy Le 26 février 2015 Neuros -
Résultat
Réalisation 31/01/2015 - Source : https://speakerdeck.com/acasademont/php7-at-php-day-spain-2015
nAcademy Le 26 février 2015 Neuros -
Merci
Questions ?
@hellosct1
@neuro_paris
Sources
- Pierre Joye
- Albert Casademont
- Internals rfc
Adoption
http://www.elephant-php.com
Except the human PHPather

Php 7 Think php7

  • 1.
    nAcademy Le 26février 2015 Neuros - PHP 7 Think php7 Christophe Villeneuve
  • 2.
    nAcademy Le 26février 2015 Neuros - Aujourd'hui... ● Situation actuelle ● Le futur ● PHP 7 Thank's Rasmus Lerdorf 2015 20 ans PHP
  • 3.
    nAcademy Le 26février 2015 Neuros - Situation actuelle Picture hellosct1 : Pyramide elePHPant
  • 4.
    nAcademy Le 26février 2015 Neuros - ➢ PHP 5.2 ✔ The END 2010 PHP (1/6)
  • 5.
    nAcademy Le 26février 2015 Neuros - ➢PHP 5.2 ➢PHP 5.3 ✔ De 2009 à Août 2014 ✔ ChangeLog ✔ Namespace ✔ Etc. PHP (2/6)
  • 6.
    nAcademy Le 26février 2015 Neuros - ➢PHP 5.2 ➢PHP 5.3 ➢PHP 5.4 ✔Dispo Mars 2012 ✔ChangeLog ✔ Les traits ✔ Etc. PHP (3/6)
  • 7.
    nAcademy Le 26février 2015 Neuros - ➢PHP 5.2 ➢PHP 5.3 ➢PHP 5.4 ➢PHP 5.5 ✔ Dispo juin 2013 ✔ ChangeLog ✔ Générators ✔ OpCache ✔ Principalement la sécurité PHP (4/6)
  • 8.
    nAcademy Le 26février 2015 Neuros - ➢PHP 6.0 ✔ No Comment Screen Hidden
  • 9.
    nAcademy Le 26février 2015 Neuros - ➢PHP 5.2 ➢PHP 5.3 ➢PHP 5.4 ➢PHP 5.5 ➢PHP 5.6 ✔ Dispo Août 2014 ✔ Variadics ✔ Function fn ($id,$params); ✔ Splat Operator ✔ Function test (arg1, arg2=null) ✔ Operator ✔ echo 2 xx 3 ; // 8 ✔ Nice speed bump ✔ Etc. PHP (5/6)
  • 10.
    nAcademy Le 26février 2015 Neuros - ➢PHP 5.2 ➢PHP 5.3 ➢PHP 5.4 ➢PHP 5.5 ➢PHP 5.6 ✔ Dispo Septembre 2015 ✔ Next changeLog ✔ ... ➢PHP 5.7 PHP (6/6)
  • 11.
    nAcademy Le 26février 2015 Neuros - + = 5 + 1 = 7
  • 12.
    nAcademy Le 26février 2015 Neuros - PHP Alternative Implementations Source : https://wiki.php.net/rfc/php7_57_roadmap ● PHP 7 – PHP Next Generation (PHPNG) ● HHVM – Code natif ● Recki-ct – Code natif ● Phalanger – .net engine
  • 13.
    nAcademy Le 26février 2015 Neuros - Roadmap Source : https://wiki.php.net/rfc/php7_57_roadmap
  • 14.
    nAcademy Le 26février 2015 Neuros - Les changements ? yes A whale (Une baleine) Picture hellosct1 : Tadoussac 2011 – elePHPant VS whale
  • 15.
    nAcademy Le 26février 2015 Neuros - Features ● :-D – PHP Next Generation – Modification structure données – Nouvelle gestion de mémoire – Etc ● :-( – Ext/MySQL – Ext/ereg – ASP Style Tags <% ou <%= et %> – Etc. :-( Source : https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
  • 16.
    nAcademy Le 26février 2015 Neuros - ● Structure intermédiaire dans le process de compilation → gain de performance et au niveau mémoire ● Améliore la qualité du code ● Position avant OpCode <?php //aucun Source : https://wiki.php.net/rfc/abstract_syntax_tree Abstract syntax tree
  • 17.
    nAcademy Le 26février 2015 Neuros - Null Coalesce Operator ● Modifie le comportement de l'opérateur ? → fonction isset() en automatique ● Disponible – Dans une chaîne – Dans un appel de méthode / fonction <?php //Avant $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; //PHP 7.0 $username = $_GET['user'] ?? 'nobody'; Source : https://wiki.php.net/rfc/isset_ternary
  • 18.
    nAcademy Le 26février 2015 Neuros - Unicode Codepoint Escape Syntax ● Utilisation de séquences Unicode dans les chaînes de caractères ● { et } ← code de caractères lisibilité + pas de limite au nombre de caractères Source : https://wiki.php.net/rfc/unicode_escape <?php echo "u{202E}Reversed text"; // outputs Reversed text echo "mau{00F1}ana"; // pre-composed character ñ echo "manu{0303}ana"; // "n" with combining ~ character (U+0303)
  • 19.
    nAcademy Le 26février 2015 Neuros - Introduce session_start() ● Ajout d'une option ● Lecture seule – Un moyen rapide de lire les données de la session lorsque la mise à jour n'est pas nécessaire ● Ecriture en option – Les données ne sont pas écrites si elles sont identiques Source : https://wiki.php.net/rfc/session-lock-ini <?php session_start(array('lazy_write'=False));
  • 20.
    nAcademy Le 26février 2015 Neuros - Catchable ● 'call to a member function of a non-object' ● Pour éviter d'obtenir une erreur non-fatale – E_RECOVERABLE_ERROR ● Cela se produit à chaque fois qu'une méthode est appelée sur autre chose qu'un objet Source : https://wiki.php.net/rfc/catchable-call-to-member-of-non-object <?php set_error_handler(function($code,$message) { var_dump($code, $message); }); $x= null; var_dump($x->method()); echo "Aliven";
  • 21.
    nAcademy Le 26février 2015 Neuros - Uniform variable Syntax ● Uniformisation de la Syntax variable ● But : Atteindre la sémantique pour certaines constructions variables Source : https://wiki.php.net/rfc/uniform_variable_syntax // old // new $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz'] $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz'] $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']() Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
  • 22.
    nAcademy Le 26février 2015 Neuros - Return Type Declarations ● Possibilité de spécifier un type de retour → pour les fonctions et méthodes Source : https://wiki.php.net/rfc/return_types <?php // retourne toujours un tableau function foo(): array { return []; }
  • 23.
    nAcademy Le 26février 2015 Neuros - Named parameters ● Nommés les paramètres ● Exemple // Remplit un tableau avec une même valeur array_fill(start, num, value) Source : https://wiki.php.net/rfc/named_params <?php // Actuellement array_fill(0, 100, 42); // Possibilité array_fill(start_index => 0, num => 100, value => 42); // ou array_fill(value => 42, num => 100, start_index => 0);
  • 24.
    nAcademy Le 26février 2015 Neuros - Et... ● Beaucoup d'autres…. RFC…. pour PHP 7.0 https://wiki.php.net/rfc#php_70 Picture PHPather Spirituel : Vincent Pontier aka EL Roubio
  • 25.
    nAcademy Le 26février 2015 Neuros - Features en cours (Votes/Discussions) ● Exceptions in the engine (for PHP 7) – Permettre la levée d'exceptions depuis le moteur de PHP ● Remove PHP 4 Constructors – Liés aux constructeurs. Depuis php5 →__construct() ● Expectations – Identifier les problèmes en Dev ( basé sur assert() ) ● Array to string conversion – Convertir un Array en String
  • 26.
    nAcademy Le 26février 2015 Neuros - Performance Picture EL Roubio – http://www.elroubio.net
  • 27.
    nAcademy Le 26février 2015 Neuros - Configuration ● VM Debian 7 1GB RAM, 1 core, SSD ulabox.com symfony 2 index / product page PHP 5.5 / 5.6 / 7.0 opcache.validate_timestamps = 0 opcache.enable_file_override = 1 HHVM 3.5 Hhvm.server_stat_cache = 1 No extensions! (APCu) Nginx, Redis, Solr, MySQL Source 31/01/2015 : https://speakerdeck.com/acasademont/php7-at-php-day-spain-2015
  • 28.
    nAcademy Le 26février 2015 Neuros - Résultat Réalisation 31/01/2015 - Source : https://speakerdeck.com/acasademont/php7-at-php-day-spain-2015
  • 29.
    nAcademy Le 26février 2015 Neuros - Merci Questions ? @hellosct1 @neuro_paris Sources - Pierre Joye - Albert Casademont - Internals rfc Adoption http://www.elephant-php.com Except the human PHPather