数か月前にHabréのレビュー付きの翻訳がすでにありましたが、最初のリリース候補PHP 7.1が最近リリースされました。これは、重要な変更はもうないことを意味し、リリースの変更内容を正確に言うことができます。 ブランチの新しいマイナーバージョン7.xがもたらす変更を無料で翻訳することで、乾いた「変更ログ」を少し復活させることにしました。
新機能
void戻り型( RFC )を追加しました
現在、何も返してはならない関数とメソッドは、戻り値型
voidでマークでき
ます 。
function someNethod(): void {
voidとしてマークされたメソッド/関数から値を返すと、
致命的なエラーレベルの例外がスローされ
ます 。
NULL値は
void (値なし)と等しくないことに注意してください。つまり、
NULLを返すことはできません。
ところで、これは
$ x = someNethod();という意味ではありません
。 何も返しません。 前と同じように、
$ xは
NULL値になります。 また、voidをパラメーターの型として使用することはできません。
function bar(void $foo) {}
新しい疑似タイプが追加されました: “ iterable” ( RFC )
function walkList(iterable $list): iterable { foreach ($list as $value) { yield $value['id']; } }
この型は基本的に、プリミティブ型の
配列と
Traversableインターフェイス(およびその派生物:
Iterator 、
Generatorなど)を組み合わせます。 たとえば、
foreachは両方のタイプで機能するが、タイプ
配列を持つ関数は
Traversableインターフェイスを持つオブジェクトを受け入れず、その逆も同様であるため、問題が発生しました。
また、このRFCのフレームワーク内で、新しい関数
is_iterable()が追加されました。これは、他のis_ *関数と同様に機能します。
型付きで返されたパラメーターでnullを許可できるようになりました( Nullable RFC )
function callMethod(?Bar $bar): ?Bar {} $this->callMethod($bar);
「?」の使用に注意してください デフォルトの
ヌル値は次と同じではありません
function callMethod(int $bar = null) {} $this->callMethod(1);
「?」を追加します 動作に後方互換性を残します
function callMethod(?Bar $bar = null) {}
継承に関する重要なポイント:
interface Fooable { function foo(int $i): ?Fooable; } interface StrictFooable extends Fooable { function foo(?int $i): Fooable;
後継では、戻り値の型を「より厳密に」(つまり、
nullableを禁止)し、逆にパラメーターを
nullableに拡張できますが、その逆はできません!
行オフセット( RFC )に負の値を使用する機能を追加しました
echo $msg[-1];
負の値は、文字列関数
strpos、stripos、substr_count、grapheme_strpos、grapheme_stripos、grapheme_extract、iconv_strpos、file_get_contents、mb_strimwidth、mb_ereg_search_setpos、mb_strpos、mbでも使用できます。
どこでも、行末からのオフセットをカウントすることを意味します。
リスト() ( RFC )コンストラクトで文字列キーを使用できます
リストの短い構文(
RFC )も追加されました。
["test" => $a, "name" => $b] = ["name" => "Hello", "test" => "World!"]; var_dump($a);
機能:
- 混合構文を使用することはできません(キーを指定する場合はすべての場所で指定し、そうでない場合は通常のインデックス0、1、2 ...が通常どおり使用されます)。
- キーを持つ空の要素も許可されていません。
- ソース配列にキーがない場合、 注意:未定義のインデックス:名前の警告がスローされ、変数はNULLになります
- ネストされたリスト構造を使用する場合、メソッドを組み合わせることができます
$points = [ ["x" => 1, "y" => 2], ["x" => 2, "y" => 1] ]; [["x" => $x1, "y" => $y1], ["x" => $x2, "y" => $y2]] = $points;
呼び出し可能な式をクロージャー( RFC )に変換します
Closure::fromCallable(callable $calback);
ここにアプリケーションの良い例があります:
class A { public function getValidator(string $name = 'byDefault') { return Closure::fromCallable([$this, $name]); } private function byDefault(...$options) { echo "Private default with:".print_r($options, true); } public function __call ( string $name , array $args ) { echo "Call $name with:".print_r($args, true); } } $a = new A(); $a->getValidator("test")(1,2,3);
クラス定数( RFC )の可視性修飾子のサポート
class Token {
いくつかのタイプの例外を1つのブロックにまとめることで、例外をキャッチできます( RFC )
try { echo "OK"; } catch (Exception | DomainException $e) {
無効な数値( RFC )を含む文字列の算術演算中のE_NOTICEおよびE_WARNINGレベルのエラー
$numberOfApples = "10 apples" + "5 pears";
これは非常に重要な変更であり、エラーハンドラーを使用して警告をインターセプトすると、理論的にはアプリケーションの下位互換性が損なわれる可能性があります。
また、興味深い機能があります。「5」+「3」の行の先頭のスペースはエラーになりません。 しかし、「5」+「3」-最後にスペースがあると警告が表示されます。
暗黙の変換の結果を回避し、警告をスローするには、目的のタイプで「キャスト」を明示的に指定できます:(int)「5」+(int)「3」、またはすべてを強制@(「5」+「3」)で抑制します。
その他の変更と後方非互換性
おそらくここで終了しますが、まだ主に拡張機能に多くのマイナーな変更があります。 そして、ホリバーにとっては、このリストで十分です。 )
まとめ
個人的には、このマイナーリリースに関する私の意見は次のとおりです。すべてが非常に有機的に適合し、これはまさに新しいPHP 7.0の大部分に欠けていたものであり、これらの変更は7.xブランチの機能を強調および強化するだけです。
7.1.1を待つことをお勧めします。恐れることなく更新して、何かを壊すことができます(もちろん7.0に切り替えていない限り)。
この記事は、すべての変更の完全な説明であるとは主張しておらず、重要なものを見逃している可能性があります。
"
Https://wiki.php.net/rfc#php_71»
Https://github.com/php/php-src/blob/php-7.1.0RC1/UPGRADINGPS
サンプルは、オンラインサンドボックス
-3v4l.org/#version=7.1.0RC1で体験できます。