PHP Velho Oeste 2024

新機能

ジェネレータの追加

ジェネレータが追加されました。 yield キーワードで利用します。 ジェネレータを使えば、シンプルなイテレータを簡単に実装できます。 Iterator インターフェイスを実装したクラスを用意する オーバーヘッドや複雑さを心配する必要はありません。

range() 関数をジェネレータで実装しなおす例を示します (step には正の値しか使えません)。

<?php
function xrange($start$limit$step 1) {
    for (
$i $start$i <= $limit$i += $step) {
        yield 
$i;
    }
}

echo 
'Single digit odd numbers: ';

/*
 * 配列を作ったり配列を返したりしていないことに注目しましょう。
 * そのぶんメモリの節約になります。
 */
foreach (xrange(192) as $number) {
    echo 
"$number ";
}

echo 
"\n";
?>

上の例の出力は以下となります。

Single digit odd numbers: 1 3 5 7 9 

finally キーワードの追加

try-catch ブロックで finally が使えるようになりました。 例外が発生したかどうかに関わらず 必ず実行しないといけないコードをここに書きます。

新しいパスワードハッシュ API

新しいパスワードハッシュ API が用意され、より簡単にパスワードをハッシュしたり管理したりできるようになりました。 PHP の crypt() が使っているのと同じライブラリを利用します。 詳細は password_hash() のドキュメントを参照ください。

foreachlist() に対応

foreachlist() を使って、 ネストした配列を個別の変数に展開できるようになりました。たとえば次のようになります。

<?php
$array 
= [
    [
12],
    [
34],
];

foreach (
$array as list($a$b)) {
    echo 
"A: $a; B: $b\n";
}
?>

上の例の出力は以下となります。

A: 1; B: 2
A: 3; B: 4

詳細な情報は foreach のマニュアルを参照ください。

empty() が任意の式に対応

変数だけでなく、任意の式を empty() に渡せるようになりました。たとえば次のようになります。

<?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";
}
?>

上の例の出力は以下となります。

This will be printed.

array リテラルと string リテラルのデリファレンス

Arraystring をデリファレンスして、 個々の要素や文字に直接アクセスできるようになりました。

<?php
echo 'Array dereferencing: ';
echo [
123][0];
echo 
"\n";

echo 
'String dereferencing: ';
echo 
'PHP'[0];
echo 
"\n";
?>

上の例の出力は以下となります。

Array dereferencing: 1
String dereferencing: P

::class によるクラス名の解決

ClassName::class で、 ClassName クラスの完全修飾名を取得できるようになりました。 次の例を参照ください。

<?php
namespace Name\Space;
class 
ClassName {}

echo 
ClassName::class;

echo 
"\n";
?>

上の例の出力は以下となります。

Name\Space\ClassName

OPcache 拡張モジュールの追加

Zend Optimiser+ のオペコードキャッシュ機能が、 OPcache 拡張モジュール としてPHP に追加されました。 OPcache は、PHP のパフォーマンスを向上させるために、 事前にコンパイル済みのスクリプトのバイトコードを共有メモリに格納します。 その結果、PHP がリクエストのたびにスクリプトの読み込みやパースをする必要がなくなります。 OPcache を有効にする方法や使いかたについては インストール のページを参照ください。

foreach が非スカラーのキーに対応

foreach が、キーに任意の型を使えるようになりました。 非スカラーのキーは PHP ネイティブの配列では使えませんが、 Iterator::key() は任意の型の値を返せ、 これを適切に処理できるようになりました。

Apache 2.4 ハンドラが Windows に対応

Apache 2.4 ハンドラ SAPI が Windows に対応するようになりました。

GD の改良

GD 拡張モジュールに、さまざまな改良が加えられました。

add a note add a note

User Contributed Notes 3 notes

up
13
PHP Guy
10 years ago
Great work.  Thank you for allowing Lists to return on foreach.
up
1
Anonymous
9 years ago
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));
        }
    }
}
up
0
wallacemaxters at gmail dot com
7 years ago
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"
To Top