php-タイプヒント:デフォルトパラメータ
PHP5タイプのヒント
PHP5でタイプヒントが導入されました。関数でパラメーターをオブジェクトに強制できるようになりました( 関数でクラスの名前を指定することにより)プロトタイプ)または
arrays
( PHP5.1以降)。ただし、NULL
がデフォルトのパラメータ値として使用されている場合は、それ以降の呼び出しの引数として許可されます。上記からの抜粋:
NULL
がデフォルトのパラメータ値として使用されている場合、それ以降の呼び出しの引数として許可されます。上記の意味は次のとおりです:
デフォルトのパラメータをタイプヒントとともに使用する場合は、デフォルト値として
NULL
のみを使用できます。つまり code1のコードが間違っているため、次のようになります。
致命的なエラー:クラスタイプのヒントを持つパラメータのデフォルト値は、
NULL
code1:
function setName ( string $name = "happ") { ... }
code2のコードが正しい場合:
code2:
function setName(string $ name = NULL){ ..。 }
この制約がphpで割り当てられるのはなぜですか?
答え :
解決策:
h int stringを入力することはできません。入力できるのは、h intオブジェクトと配列のみであるため、これは正しくありません。
function setName ( string $name = "happ") {
(ここでコンパイル時エラーが発生しない理由は、PHPがintクラスの名前として「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以降、次のように入力できますint callable
:
function foo(callable $ callback){
call_user_func($ callback);
}
[Edit 2]
PHP 7.0以降、次のように入力できますint bool
、 float
、 int
、および string
。これにより、質問のコードが有効な構文になります。 PHP 7.1以降、次のように入力できますint iterable
。
答え :
解決策:
string <の型宣言
(PHP5では型hintとも呼ばれます) /code>タイプはPHP7でサポートされています。
有効なタイプは次のとおりです。
- クラス/intインターフェース名(> = PHP 5.0.0);
self
(> = PHP 5.0.0);array
(> = PHP 5.1.0);callable
(> = PHP 5.4.0);bool
、float
、int
、{- code-1}
(> = PHP 7.0.0);- 反復可能-arrayまたはTraversableのインスタンス(> = PHP 7.1.0)のいずれか。
答え :
解決策:
これは、コンパイル時間と実行時間の値の問題です。コンパイル時には、リテラル値(文字列、数値、ブール値、およびNULL)のみが許可されます。現時点では、PHPプロセッサはすべての可能なクラスを認識できないため、関数の引数でオブジェクトのインスタンスを作成することはできません。
抜粋から期待しているのは、通常はNULLを型ヒント関数に渡すと、例外/エラーがスローされるということです。デフォルトをNULLに設定した場合、NULLが渡されても、この例外はスローされません。私はそれをテストしていません、ちょうど私が期待するものです。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。