web-dev-qa-db-ja.com

PHPで変数型を宣言しますか?

私はNetbeansをPHPでオートコンプリートさせようとしていました 、そしてこのコードがPHPで有効であることを学びました:

function blah(Bur $bur) {}

いくつかの質問:

  1. これは実際に私がblahメソッドに渡すことができる変数のタイプに制限を課していますか
  2. これがIDEを支援するだけであれば、それで十分です。 PHP関数にいない場合、変数の型を宣言するにはどうすればよいですか?
45
Dan Rosenstark

この型ヒントは、関数の引数の検証にのみ機能します。 PHP変数は常に特定の型でなければならないことを宣言できません。これは、例では、 "burh"が呼び出されたときに$ burがBur型でなければならないことを意味します。関数内で非Bur値に再割り当てできます。

型ヒントは、クラス名またはインターフェイス名に対してのみ機能します。たとえば、引数が整数でなければならないことを宣言することはできません。

PHPの型ヒントの面倒な点の1つは、Javaとは異なりますが、NULL値は許可されないことです。したがって、オブジェクトの代わりにNULLを渡すオプションが必要な場合は、type-hintを削除して、関数の上部で次のような操作を行う必要があります。

assert('$bur === NULL || $bur instanceof Bur');

EDIT:PHP 5.1;からデフォルト値としてNULLを使用できるようになったため、この最後の段落は適用されません。型のヒントもあります。

EDIT:SPL Type Handling 拡張機能もインストールできます。これにより、文字列、int、float、booleanのラッパー型が提供されます。 、列挙型。

EDIT:PHP 5.1以降の「配列」、およびPHP 5.4。

EDIT:PHPなので、 "string"、 "int"、 "float"および "bool"も使用できます。 7.0。

69
JW.
  1. 関数パラメーターにデータ型を指定すると、その型ではない値を渡すと、キャッチ可能な致命的エラーをスローするPHPが発生します。ただし、クラスには型のみを指定できます。文字列や整数などのプリミティブではありません。
  2. ほとんどのIDEは、PHPDocスタイルのコメントが提供されている場合、そのコメントからデータ型を推測できます。例えば.

/**
 * @var string
 */
public $variable = "Blah";
29
Jim OHalloran

これは、タイプヒントと呼ばれ、PHP 5.で追加されます。 't期待される型を渡しません。ただし、プリミティブ型を入力することはできません(int $ burはありません)。

7
J Cooper

#2:(...)変数の型をPHPで関数内にいない場合はどうすれば宣言できますか?

最近、PHP4と5で「 settype() 」と「 gettype() 」について聞いた
いつでも簡単に変数の型を強制できます


PHP.netから:

bool settype(混合&$ var、文字列$ type)

パラメーター

var:変換される変数。 type:typeの可能な値は次のとおりです。

  • "boolean"(または、PHP 4.2.0、 "bool")
  • "整数"(または、PHP 4.2.0、 "int")
  • "float"(PHP 4.2.0、古いバージョンでは非推奨のバリアント "double"を使用するためのみ可能)
  • 「ひも」
  • "アレイ"
  • 「オブジェクト」
  • 「null」(PHP 4.2.0)以降

[:D最初の訪問、最初のコメント...]

6
Shad

これは、実際にblahメソッドに渡すことができる変数のタイプに制限を課していますか?

これは type hinting と呼ばれます。 PHP私がリンクしたばかりのドキュメントによると、はい、それは引数タイプに制限を課します: "タイプヒントを満たさないと、キャッチ可能な致命的エラー。 "

PHPで関数内にいない場合、変数の型を宣言するにはどうすればよいですか?

読み取り タイプジャグリング 。 PHPで変数の型を明示的に定義することはできません。その型は使用されるコンテキストによって決定されます。

3
Jeremy Ruten