PHP 7のジェネレーター戻り式(Return Expressions)の使い方と実例
PHPの以前のバージョンでは、ジェネレーター関数から式を返すことができませんでした。しかしPHP 5.5以降、既存のジェネレーター機能に「戻り式(return expression)」が追加されました。この機能を利用することで、ジェネレーター内でreturnステートメントを自然に記述できるようになり、最後に評価された式の値を返すことも可能になります。
- ジェネレーターの戻り式では、式の「値」を返すことのみが可能で、「参照」を返すことはできません。新しく追加されたGenerator::getReturn()メソッドを使えば、ジェネレーター関数が定義済みの値のyieldをすべて完了した後、その戻り値を取得できます。
- PHP 7のジェネレーターでは、戻り式によって最終的な値を返せます。$generator->getReturn()を呼び出すことで戻り値を取得できます。PHP 7では、ジェネレーターを実行するクライアントコード側が結果を保持できる形で、コルーチンの処理の最終値をジェネレーターから返すことが可能になりました。
ジェネレーターの戻り式:サンプルコード1
<html>
<head>
<title> PHP 7 Feature : Generator Return Expressions </title>
</head>
<body>
<?php
$generator = (function(){
yield "five";
yield "six";
yield "seven";
return "eight";
})
();
foreach ($generator as $val){
echo $val, PHP_EOL;
}
echo $generator ->getReturn(), PHP_EOL;
?>
</body>
</html>出力結果
上記のPHPプログラムを実行すると、以下の出力が得られます。
five six seven eight
サンプルコード1の解説
- まず、エディタでHTMLコードを記述し、bodyタグ内にジェネレーターの戻り式を扱うPHP 7のコードを組み込みます。
- 次に、変数$generatorに、無名関数として定義したジェネレーターを代入します。
- $generatorの内部では、"five"、"six"、"seven"を順にyieldし、最後に"eight"をreturnで返しています。
- 最後に、foreachループで$generatorを最後まで反復処理しながらyieldされた値を出力し、続けてgetReturn()メソッドでジェネレーターの戻り値を出力しています。
ジェネレーターの戻り式:サンプルコード2
<html>
<head>
<title> PHP 7 Feature: Generator Return Expressions Example </title>
</head>
<body>
<?php
function gen(){
yield 'A';
yield 'B';
yield 'C';
return 'gen-return';
}
$generator = gen();
var_dump($generator);
foreach ($generator as $letter){
echo $letter;
}
var_dump($generator->getReturn());
?>
</body>
</html>出力結果
上記のPHPプログラムを実行すると、以下の出力が得られます。
object(Generator)#1 (0) { }ABCstring(10) "gen-return"サンプルコード2の解説
- gen()関数内では、"A"、"B"、"C"を順にyieldし、最後に"gen-return"という文字列をreturnで返しています。
- var_dump()で$generatorを確認すると、Generatorクラスのオブジェクトであることがわかります。
- foreachによる反復処理では、yieldされた値のみが順に出力され、"ABC"と表示されます。return値はこの段階ではまだ取得されません。
- 反復処理が完了した後にgetReturn()メソッドを呼び出すことで、returnで返された10バイトの文字列"gen-return"を取得できます。
注意点
getReturn()メソッドを呼び出せるのは、ジェネレーターの反復処理が完了した後のみです。反復が完了する前に呼び出すとExceptionがスローされるため、必ずforeachなどの反復処理を終えてから呼び出すようにしましょう。
-
PHPのpi()関数とは?使い方と定義済み定数との対応を実例付きで解説
pi()関数の定義と使い方PHPのpi()関数は、数学定数π(円周率)の値を返す関数です。戻り値はfloat型の「3.14159265359」であり、PHPにあらかじめ定義されている定数M_PIとまったく同じ値になります。構文pi ( void ) : floatパラメータこの関数は引数を受け取りません。引数なしでそのまま呼び出すことができます。戻り値pi()関数は数学定数πの値を返し、定義済みの数学定数M_PIと等価です。数式の中では、M_PIの代わりにpi()関数を使うこともできます。対応するPHPバージョンこの関数はPHP 4.x、PHP 5.x、PHP 7.xのすべてのバージョンで利用
-
PHPのpathinfo()でUTF-8ファイル名を正しく取得する方法
PHPのpathinfo()でUTF-8ファイル名を正しく取得する方法PHPのコア関数の多くは、Latin-1(ISO-8859-1)以外の文字セットを正しく扱うことができません。そのため、日本語などのマルチバイト文字を含むファイル名をpathinfo()に渡しても、期待どおりの結果が得られない場合があります。しかし、pathinfo()を呼び出す前にsetlocale()でロケールを適切に設定しておけば、UTF-8でエンコードされたファイル名でも正しい結果を取得できるようになります。ロケールの初期設定についてデフォルトでは、PHPは「C」ロケールで動作します。一方、CLIスクリプトは多くの環