PHP 5型ヒント
PHP 5はタイプヒントを導入します。関数はパラメータをオブジェクトにすることができます(指定することにより関数プロトタイプのクラスの名前)またはarrays
(since PHP 5.1 =)。ただし、NULL
がデフォルトのパラメーター値として使用されている場合は、以降の呼び出しの引数として許可されます。
上記の次の抜粋:
NULL
がデフォルトのパラメータ値として使用される場合、それは以降の呼び出しの引数として許可されます。
上記の意味:
タイプヒンティングでデフォルトパラメータを使用する場合、デフォルト値としてNULL
のみを使用できます。
i.e。code1のコードが間違っていて、次のようになります。
致命的なエラー:クラスタイプのヒントを持つパラメーターのデフォルト値は、NULL
のみです
function setName ( string $name = "happ") {
...
}
Code2のコードが正しい場合:
function setName ( string $name = NULL) {
...
}
なぜこの制約がPHPで割り当てられているのですか?
文字列をタイプヒントすることはできません。オブジェクトと配列のみをタイプヒントすることができるため、これは正しくありません。
function setName ( string $name = "happ") {
(ここでコンパイル時エラーが発生しないのは、PHPが "string"をクラスの名前として解釈しているためです。)
ドキュメントの文言は、これを行う場合:
function foo(Foo $arg) {
その場合、foo()に渡す引数はオブジェクトFooのインスタンスでなければなりません。しかし、これを行う場合:
function foo(Foo $arg = null) {
Foo()に渡される引数は、オブジェクトFooのインスタンス、またはnullのいずれかです。また、これを行う場合:
function foo(array $foo = array(1, 2, 3))
その後、foo(null)を呼び出すことはできません。この機能が必要な場合は、次のようなことができます。
function foo(array $foo = null) {
if ($foo === null) {
$foo = array(1, 2, 3);
}
[Edit 1]
PHP 5.4では、callable
と入力できます:
function foo(callable $callback) {
call_user_func($callback);
}
[Edit 2]
PHP 7.0では、bool
、float
、int
、およびstring
と入力できます。これにより、質問内のコードが有効な構文になりますPHP 7.1以降では、iterable
と入力できます。
これは、コンパイル時間と実行時の値の問題です。コンパイル時には、リテラル値(文字列、数値、ブール値、およびNULL)のみが許可されます。 PHPプロセッサは現時点ではすべての可能なクラスについて知ることができないため、関数の引数にオブジェクトのインスタンスを作成することはできません。
抜粋から私が期待しているのは、通常、タイプヒント付き関数にNULLを渡すと、例外/エラーがスローされることです。デフォルトをNULLに設定すると、NULLが渡されてもこの例外はスローされません。私はそれをテストしていません、ちょうど私が期待するものです。