ホームページ >バックエンド開発 >PHPチュートリアル >PHP7 はスカラー型を宣言し、強力な型チェックについて説明します

PHP7 はスカラー型を宣言し、強力な型チェックについて説明します

韦小宝
韦小宝オリジナル
2018-03-03 11:01:015568ブラウズ

PHP7 は 2015 年にリリースされ、ますます多くの人がそれを使用しています。この記事では、PHP7 がスカラー型を宣言する方法と、PHP7 が理解できない学生でも理解できる方法について説明します。ああ!

スカラー型宣言

PHPはPHP5.0以降、クラスとインターフェースのパラメータ型宣言をサポートしており、PHP5.1は配列をサポートし、PHP5.4は呼び出し可能をサポートしています。これらの型宣言により、PHP は実行中に正しいパラメーターを渡すことができるようになり、関数シグネチャの情報がより多くなります。

PHP7からは、int、float、string、boolが型宣言として認識され、関数の戻り値の型やパラメータの型宣言に使用できるようになります

<?php
function sum(int $a,int $b):string {
return $a+$b;
}
var_dump(sum(1,2));

上記のコードは正常に動作します
結果は string(1) "3 ", 弱い型 検証モードでは、パラメータが宣言された型と一致しない場合、PHP の規則に従って変換されます。

PHP7.1 では、null 許容型の宣言メソッドが追加され、関数の戻り値の型として void が追加されます。戻り値は、強力な型チェック モードで定義されます。 void 型の関数は、null を返す場合でも戻り値を持つことができません:

declare(strict_types=1);
function returns_one(): void {
return 1; // Fatal error: A void function must not return a value
}
function returns_null(): void {
return null; // Fatal error: A void function must not return a value
}

さらに、 void は戻り値の型にのみ適用され、パラメーターの型宣言には使用できません。エラーが発生します:

function foobar(void $foo) { 
// Fatal error: void cannot be used as a parameter type
}

Nullable 型宣言

Nullable 型は主にパラメータの型宣言と関数の戻り値の宣言に使用されます。

主な 2 つの形式は次のとおりです:

function answer(): ?int{
return null; //ok
}function answer(): ?int{
return 42; // ok
}
function say(?string $msg) {
if ($msg) {
echo $msg;
}
}

これが何を意味するかというと、関数パラメータの型が、指定された型または null。

このメソッドはインターフェース関数の定義にも使用できます:

interface Fooable {
function foo(?Fooable $f);
}

ただし、注意すべき点が 1 つあります: 関数自体がパラメーターの型を定義しており、デフォルト値がない場合は、たとえそれが null 許容であっても省略することはできませんそうでない場合は、エラーが発生します。

は次のとおりです:

function foo_nullable(?Bar $bar) {}foo_nullable(new Bar); // 可行
foo_nullable(null); // 可行
foo_nullable(); // 不可行

しかし、上記の関数のパラメータが?Bar $bar = nullの形式で定義されている場合、3番目の書き方も可能です。 = null は実際には ? のスーパーセットと同等であるため、null 許容型のパラメーターのデフォルト値として null を設定できます。

クラス関数の戻り値の型の宣言はサブクラスでオーバーライドできません。そうでない場合は、エラーがトリガーされます:

class Foo
{
public function bar(): void {
}
}class Foobar extends Foo
{
public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void
}
}

厳密検証モード
strict_types/declare() ディレクティブ

デフォルトでは、すべての PHP ファイルは弱い型です検証テストモード。新しい宣言ディレクティブは、strict_types の値 (1 または 0) を指定します。1 は厳密な型チェック モードを示し、関数呼び出しと return ステートメントに適用されます。0 は弱い型チェック モードを示します。

declare(strict_types=1) はファイルの最初のステートメントでなければなりません。このステートメントがファイル内の他の場所にある場合、コンパイル エラーが生成され、ブロック モードは明示的に禁止されます。

encoding ディレクティブと似ていますが、ticks ディレクティブとは異なり、strict_types ディレクティブは指定されたファイルにのみ影響し、(include などを通じて)それに含まれる他のファイルには影響しません。このディレクティブは実行時にコンパイルされ、変更できません。その仕組みは、関数呼び出しと戻り値の型チェックが型制約に準拠するようにオペコードにフラグを設定することです。

<?php
declare(strict_types=1);
function sum(int $a,int $b):string {
return $a+$b;
}
var_dump(sum(1,2));

上記のコードは関数の戻り値の型宣言に準拠していないため、TypeErrorがスローされます

<?php
declare(strict_types=1);
function sum(string $a,string $b):string {
return $a+$b;
}
var_dump(sum(1,2));

上記のコードは、関数のパラメータの型宣言に準拠していないため、エラーもスローされます

は例外です。ブロード 型変換 では、int を float にすることができます。つまり、パラメーターが float 型として宣言されている場合でも、int パラメーターを受け入れることができます。

<?php
declare(strict_types=1);
function sum(int $a,int $b):float {
return $a+$b;
}
var_dump(sum(1,2));

上記のコードは正常に実行されます

このシナリオでは、float を受け入れるように定義された関数に int パラメータを渡し、このパラメータは float に変換されます。これ以外の変換は許可されません。

関連する推奨事項:

PHP7.2バージョンのパフォーマンスの紹介

以上がPHP7 はスカラー型を宣言し、強力な型チェックについて説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。