New features
Generators added
Support for generators has been added via the yield keyword. Generators provide an easy way to implement simple iterators without the overhead or complexity of implementing a class that implements the Iterator interface.
A simple example that reimplements the range() function as a generator (at least for positive step values):
<?php
function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}
echo 'Single digit odd numbers: ';
/*
* Note that an array is never created or returned,
* which saves memory.
*/
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";
}
echo "\n";
?>
The above example will output:
Single digit odd numbers: 1 3 5 7 9
finally keyword added
try-catch blocks now support a finally block for code that should be run regardless of whether an exception has been thrown or not.
New password hashing API
A new password hashing API that makes it easier to securely hash and manage passwords using the same underlying library as crypt() in PHP has been added. See the documentation for password_hash() for more detail.
foreach now supports list()
The foreach control structure now supports unpacking nested arrays into separate variables via the list() construct. For example:
<?php
$array = [
[1, 2],
[3, 4],
];
foreach ($array as list($a, $b)) {
echo "A: $a; B: $b\n";
}
?>
The above example will output:
A: 1; B: 2 A: 3; B: 4
Further documentation is available on the foreach manual page.
empty() supports arbitrary expressions
Passing an arbitrary expression instead of a variable to empty() is now supported. For example:
<?php
function always_false() {
return false;
}
if (empty(always_false())) {
echo "This will be printed.\n";
}
if (empty(true)) {
echo "This will not be printed.\n";
}
?>
The above example will output:
This will be printed.
array and string literal dereferencing
Array and string literals can now be dereferenced directly to access individual elements and characters:
<?php
echo 'Array dereferencing: ';
echo [1, 2, 3][0];
echo "\n";
echo 'String dereferencing: ';
echo 'PHP'[0];
echo "\n";
?>
The above example will output:
Array dereferencing: 1 String dereferencing: P
Class name resolution via ::class
It is possible to use ClassName::class to get a fully qualified name of class ClassName. For example:
<?php
namespace Name\Space;
class ClassName {}
echo ClassName::class;
echo "\n";
?>
The above example will output:
Name\Space\ClassName
OPcache extension added
The Zend Optimiser+ opcode cache has been added to PHP as the new OPcache extension. OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request. See the installation instructions for more detail on enabling and using OPcache.
foreach now supports non-scalar keys
foreach now supports keys of any type. While non-scalar keys cannot occur in native PHP arrays, it is possible for Iterator::key() to return a value of any type, and this will now be handled correctly.
Improvements to GD
Various improvements have been made to the GD extension, these include:
- Flipping support using the new imageflip() function.
- Advanced cropping support using the imagecrop() & imagecropauto() functions.
- WebP read and write support using imagecreatefromwebp() & imagewebp() respectively.
English translation
You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.
Thank you in advance.
Document created the 30/01/2003, last modified the 26/10/2018
Source of the printed document:https://www.gaudry.be/en/php-rf-migration55.new-features.html
The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.
References
These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.