Great work. Thank you for allowing Lists to return on foreach.
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";
?>
O exemplo acima irá imprimir:
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.
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";
}
?>
O exemplo acima irá imprimir:
A: 1; B: 2 A: 3; B: 4
Further documentation is available on the foreach manual page.
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";
}
?>
O exemplo acima irá imprimir:
This will be printed.
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";
?>
O exemplo acima irá imprimir:
Array dereferencing: 1 String dereferencing: P
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";
?>
O exemplo acima irá imprimir:
Name\Space\ClassName
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 keysforeach 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.
The Apache 2.4 handler SAPI is now supported on Windows.
Various improvements have been made to the GD extension, these include:
Yield is awesome... it's starts to look like a real language now ;-)
class myList {
public $list;
public function __construct($list) {
$this->list = $list;
}
public function select(...$keys) {
$keys_array = array_fill_keys($keys, null);
$items = $this->list;
foreach($items as $item) {
yield array_merge($keys_array, array_intersect_key($item, $keys_array));
}
}
}
After PHP 5.5, foreach with reference in arbitrary array does not generate an error:
foreach ([1, 2, 3, 4] as $key => &$value) {
$value = $value . ' R$';
}
before 5.4, will generate "Cannot create references to elements of a temporary array expression"