Nouvelles fonctionnalités

Nouveau type object

Un nouveau type, object, a Ă©tĂ© introduit. Il peut ĂȘtre utilisĂ© pour typer un paramĂštre (contravariant) ou pour typer le retour (covariant).

<?php

function test(object $obj) : object
{
return new
SplQueue();
}

test(new stdClass());

Chargement des extensions par leur nom

Les extensions partagées ne demanderont plus de saisir leur nom complet (.so pour Unix ou .dll pour Windows). C'est actif pour le fichier php.ini et pour la fonction dl().

Substitution de méthode abstraite

Les mĂ©thodes abstraites peuvent maintenant ĂȘtre surchargĂ©es quand une classe abstraite Ă©tend une autre classe abstraite.

<?php

abstract class A
{
abstract function
test(string $s);
}
abstract class
B extends A
{
// surchargée - tout en maintenant la contravariance pour les paramÚtres et la covariance pour le retour
abstract function test($s) : int;
}

Sodium est maintenant une extension du noyau

La bibliothĂšque moderne de cryptographie sodium est maintenant devenue une extension de base dans PHP.

Pour une référence de fonction complÚte, consulter le chapitre Sodium.

Hachage de mot de passe avec Argon2

Argon2 a été ajouté à l'API pour le hachage de mot de passe, et les constantes suivantes ont été exposées :

Extension des types de chaĂźne PDO

Le type de chaĂźne de PDO a Ă©tĂ© Ă©tendu pour prendre en charge le type de caractĂšre national lors de l’émulation des requĂȘtes prĂ©parĂ©es. Cela a Ă©tĂ© fait avec les constantes suivantes :

Ces constantes sont utilisĂ©es avec l’opĂ©rateur de bits OR et PDO::PARAM_STR :

<?php

$db
->quote('ĂŒber', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

Ajout d'information de dĂ©bogage pour l'Ă©mulation des requĂȘtes prĂ©parĂ©es pour PDO

La mĂ©thode PDOStatement::debugDumpParams() a Ă©tĂ© mise Ă  jour pour inclure le SQL envoyĂ© Ă  la DB, oĂč la requĂȘte complĂšte, requĂȘte brute (y compris les espaces rĂ©servĂ©s remplacĂ©s par leurs valeurs liĂ©es) sera montrĂ©e. Ceci a Ă©tĂ© ajoutĂ© afin de faciliter le dĂ©bogage de l'Ă©mulation des requĂȘtes prĂ©parĂ©es (et donc il sera disponible lorsque l'Ă©mulation des requĂȘtes prĂ©parĂ©es est activĂ©e).

Prise en charge des opérations étendues de LDAP

La prise en charge des EXOP a été ajoutée dans l'extension LDAP. Cela a été fait en exposant les constantes et les fonctions suivantes :

Informations additionnelles des adresses dans l'extension Sockets

L'extension sockets a maintenant la capacité de rechercher les informations sur l'adresse, mais aussi de s'y connecter, de se lier dessus et de l'expliquer. Les quatre fonctions suivantes ont été ajoutées pour cela :

Élargissement du type des arguments

Les types de paramĂštres des mĂ©thodes substituĂ©es et des implĂ©mentations de l’interface peuvent maintenant ĂȘtre omis. C’est toujours dans le respect de LSP, puisque les types de paramĂštres sont contravariants.

<?php

interface A
{
public function
Test(array $input);
}

class
B implements A
{
public function
Test($input){} // type omis pour $input
}

Permettre une virgule de fin pour les espaces de noms groupés

Une virgule de fin peut maintenant ĂȘtre ajoutĂ©e Ă  la syntaxe d’utilisation groupĂ©e introduite en PHP 7.0.

<?php

use Foo\Bar\{
Foo,
Bar,
Baz,
};

Prise en charge sur Windows de proc_nice()

La fonction proc_nice() est maintenant prise en charge sur Windows.

Prise en charge de endian pour pack() et unpack()

Les fonctions pack() et unpack() prennent en charge les nombres décimaux et doubles dans les deux Little et Big endian.

Améliorations de l'extension EXIF

L'extension EXIF a été mise à jour pour prendre en charge une gamme beaucoup plus large de formats. Cela signifie que ces balises spécifiques au format sont maintenant correctement traduites lors de l'analyse des images avec la fonction exif_read_data(). Les nouveaux formats suivants sont désormais pris en charge :

  • Samsung
  • DJI
  • Panasonic
  • Sony
  • Pentax
  • Minolta
  • Sigma/Foveon
  • AGFA
  • Kyocera
  • Ricoh
  • Epson

Les fonctions EXIF exif_read_data() et exif_thumbnail() prennent désormais en charge des flux en tant que premier argument.

Nouvelles fonctionnalités dans PCRE

  • Le modificateur J pour dĂ©finir PCRE_DUPNAMES a Ă©tĂ© ajoutĂ©.

SQLite3 permet l'écriture de BLOBs

SQLite3::openBlob() permet maintenant d'ouvrir des champs BLOB en mode écriture; auparavant, seul le mode lecture était pris en charge.

Oracle OCI8 prise en charge du Transparent Application Failover

La prise en charge de la fonction de rappel de Transparent Application Failover (TAF) a été ajoutée. TAF permet aux applications PHP oci8 de se reconnecter automatiquement à une base de données préconfigurée lorsqu'une connexion est rompue. Le nouveau support de rappel TAF permet aux applications PHP de surveiller et de contrÎler la reconnexion pendant le basculement.

Améliorations de l'extension ZIP

La prise en charge de la lecture et de l'écriture d'archives chiffrées a été ajoutée (nécessite libzip 1.2.0).

La classe ZipArchive implémente maintenant l'interface Countable.

Le flux zip:// accepte maintenant l'option de contexte 'password'.

add a note

User Contributed Notes 2 notes

up
3
antonfedonyuk at gmail dot com ¶
5 years ago
Note: "omitted" = "removed":
<?php
declare(strict_types=1);

interface ITest
{
    public function run(array $input);
}

class Test implements ITest
{
    public function run($input) {
       return $input;
   }
} 

echo (new Test())->run('foo'); // display foo, no error
?>
up
-3
info at ensostudio dot ru ¶
5 years ago
Note: you cant change parameter type for abstract method defined in interface.
<?php
abstract class AbstractAssocArray imlements ArrayAccess
{
    abstract public function offsetSet($offset, $value): void;
    ...
}
abstract class AbstractAssocArray2 extends AbstractAssocArray
{
    abstract public function offsetSet(string $offset, $value): void;
}
class AssocArray extends AbstractAssocArray2
{
    public function offsetSet(string $offset, $value): void
    {
         $this->{$offset} = $value;
    }
}
?>
It's throw fatal error: Declaration of AbstractAssocArray::offsetSet(string $offset, $value): void must be compatible with AbstractAssocArrayAccess::offsetSet($offset, $value).