7. Incompatibilité
Suppression des fonctionnalités dépréciées
https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
ext/mySQL
Exemple :
PDO_MySQL ou
MySQLi
(dépréciée depuis PHP5.5)
ext/ereg ext/pcre(dépréciée depuis PHP5.3)
8. Incompatibilité
Les constructeurs PHP 4 sont maintenant dépréciés !
https://wiki.php.net/rfc/remove_php4_constructors
<?php
class IlEtaitTemps {
public function iletaittemps() { … }
}
new IlEtaitTemps();
Les constructeurs PHP4 ne sont plus reconnus dans une
classe d’un namespace.
9. Incompatibilité
Certains types sont devenus des mots clés réservés pour les
noms de classes, traits et interfaces
https://wiki.php.net/rfc/reserve_more_types_in_php_7
https://wiki.php.net/rfc/reserve_even_more_types_in_php_7
- int
- float
- bool
- string
- true
- false
- null
- resource
- object
- mixed
- numeric
<?php
class resource {
public function __construct() { … }
}
new resource();
Retourne une fatal erreur, Fatal error:
"resource" cannot be used as a classname
11. Incompatibilité
switch n’accepte plus plusieurs default
<?php
switch ($expression) {
default:
echo 'Olá';
break;
default:
echo 'Tchau';
break;
}
Fatal error: Switch statements may
only contain one default clause
12. Incompatibilité
Un octal invalide produit maintenant une erreur
<?php
$octale = 0148;
echo $octale;
PHP 5.x PHP 7
Affiche 12 Fatal Error : Invalid numeric literal ….
13. Incompatibilité
Les chaînes de caractères hexadécimales ne sont plus reconnues
<?php
var_dump(is_numeric('0x143'));
PHP 5.x PHP 7
bool(true) bool(false)
14. Incompatibilité
Nouveau caractère u Permet de spécifier un caractère Unicode et
particulièrement UTF-8 (en hexadécimal)
https://wiki.php.net/rfc/unicode_escape
<?php
$unicode = "u{265C}";
echo $unicode;
Incompatibilité car u dans une double-quote ou HEREDOC
existant sera considéré comme un caractère Unicode.
Si celui-ci n’existe pas, une erreur fatale de compilation est levée
16. Incompatibilité
La redéfinition d’un argument d’une fonction
n’est plus possible
<?php
function test($param, $valid, $valid) { … }
Retourne une erreur fatale : Fatal error: Redefinition of parameter $valid ….
17. Incompatibilité
Les 2 fonctions func_get_arg et func_get_args
retournent la valeur d’une variable dans le contexte local
<?php
function samba($samba) {
$samba++;
echo func_get_arg(0);
}
samba(2);
PHP 5.x PHP 7
Affiche 2 Affiche 3
18. Scalar type hinting
PHP7 offre la possibilité de spécifier un type scalaire
(string, integer, float, boolean) pour le type hinting
Activer en ajoutant declare(strict_types=1); en
première instruction du fichier
<?php
declare(strict_types=1);
function test(int $param) {
return $param;
}
echo test(1); echo test("1");
Affiche 1 Fatal error: Argument 1 passed to test()…
19. Return type declaration
Possibilité de définir le type de retour attendu
Une catchable fatal error est retournée si le type ne correspond pas
<?php
function test(): DateTime {
return 1;
}
<?php
function test(): array {
return [0,1,2];
}
Type de retour invalide
Type de retour valide
Les méthodes constructeurs, destructeurs et clones ne peuvent pas
déclarer de type de retour.
20. Group use declaration
Regroupement de déclaration use d’un namespace commun
https://wiki.php.net/rfc/group_use_declarations
<?php
use DarkmiraComponentSecurityClassA;
use DarkmiraComponentSecurityClassB;
use DarkmiraComponentBddClassC as classC;
<?php
use DarkmiraComponent{
SecurityClassA,
SecurityClassB,
BddClassC as classC
};
21. Anonymous Class
Même principe que les fonctions anonymes
https://wiki.php.net/rfc/return_types
<?php
class Log {
public function log ($msg) { … }
}
$obj->setLog(new Log());
<?php
$obj->setLog(new class {
public function log ($msg) { … }
});
22. Starship Operator
Opérateur de comparaison (Combined Comparison Operator)
https://wiki.php.net/rfc/combined-comparison-operator
- Identique aux fonctions strcmp()
et version_compare()
- Mais peut comparer tous les
types du moment qu’ils sont
identiques de part et d’autre de
l’opérateur : chaînes, array,
objets, ….
Retourne :
0 si égal
-1 si la valeur de gauche est
inférieure
1 si la valeur de droite est
inférieure
<?php
function order_func($a, $b) {
return
($a < $b) ? -1 : (($a > $b) ? 1 : 0)
;
}
<?php
function order_func($a, $b){
return $a <=> $b;
}
23. Null Coalesce Operator
L’opérateur ?? retourne le résultat de l’opération de gauche si
celui-ci n’est pas NULL sinon le résultat de l’opération de droite
https://wiki.php.net/rfc/isset_ternary
<?php
$name = isset($_GET['name']) ? $_GET['name'] : 'default';
<?php
$name = $_GET['name'] ?? 'default';
29. La version 2.8 (LTS) intègre les
fonctionnalisés de la version 3.0 en
conservant la rétro compatibilité avec les
précédentes versions.
30. Des changements dans son
architecture bas niveau
- Changement dans les signatures de méthode
- Remplacements et redéfinitions de classes et
méthodes
- Adaptation aux nouvelles normes PSR (Propose a
Standards Recommendation) http://www.php-fig.org/
-Modifications mineures d’architectures
- Modifications dans la structure des fichiers
31. Les normes PSR
PSR : Propose a Standards Recommendation
Recommandations validées par PHP Framework Interoperability
Group http://www.php-fig.org/
PSR-O : chargement des classes PHP et de l’autoloading
PSR-1 : fixe les conventions minimales de codage
PSR-2 : défini le style et l’organisation du code
PSR-3 : s’occupe de l’interface des loggers
… …