2017-04-30 4 views
5

PHP7では、メソッドが与えられたパラメータの型と結果の型を設定するときに、それらをPHPDocで再度ドキュメント化する必要がありますか?PHP7を使用する場合、PHPDocでメソッドを文書化する必要がありますか?

function foo(string $text): bool 
{ 
    return true; 
} 

/** 
* @param string $text 
* @return bool 
*/ 
function foo($text) { 
    return true; 
} 

と同等であるため、これらの情報を複製することが必要ですか?

/** 
* @param string $text 
* @return bool 
*/ 
function foo(string $text): bool 
{ 
    return true; 
} 

編集:私は自分のコードのドキュメントを生成したPHPDocを使用しませんが、PHPStormの助けを借りて、私と私の同僚のための方法で一貫性を維持します。

+0

phpdocを実行して、パラメータと結果の型を宣言したときの動作を確認しましたか?それはあなたにあなたの答えを与えるでしょう。 –

+0

@JohnCondeは、この構文を認識できるPHPDocではありませんか? –

+0

@MarcBrillault彼が言っていることは次のとおりです:**試してみてください** – Xatenev

答えて

4

のdocblockがコーダ機能は、ありません、それはそれは単なるコメントであるとして、それは、PHPパーサーによって無視されますかを説明するために使用することができるものですより多くの情報を見つけることができます誰か(またはあなた)がコードを読んだときに、その関数が何をしているのかが分かりやすいため、すべての関数とメソッドの上にdocblockを置くことをお勧めします。

A IDEは通常、オートコンプリートのためにのdocblockを使ってブロックをコード

と一致しない場合、docblockには、しかし、しかし

function foo(string $text): bool 
{ 
    return true; 
} 

と等価ではありませんstring:boolによって上書きされます

/** 
* @param string $text 
* @return bool 
*/ 
function foo($text) { 
    return true; 
} 

最初の例で:boolが強制そのfoo()trueまたはfalseのいずれかを返します。それ以外の場合、PHPはその型への戻り値のキャストを試みるか、致命的なエラーをスローします。 $textの場合はタイプヒントstringと同じです。最初のパラメータは、単に期待リターンがtrueかのどちらかであると言う、そうでない場合、PHPは文字列または致命的なエラーにそれをキャストしようとし

をスローされます@return bool@param stringは全く何も強制しない、文字列型の値でなければなりません。

function foo(string $a) :bool 
{ 
    var_dump($a); // string '10' 
    return "string"; 
} 

var_dump(foo(10)); // bool true 

が問題なし、PHPは文字列に10をキャストすることができますし、"string"true があります:false

は、次の例を見てみましょう

注意を(おそらくPDOオブジェクトに何かをしようとしているので、おそらく、さらに上の他の問題に実行している)最後の1つの作業を行うのdocblockを使用して、次の

function foo(PDO $a) :bool 
{ 
    var_dump($a); 
    return "string"; 
} 

var_dump(foo(10)); // fatal error, 10 is not PDO and can not be cast to PDO 

かかわらの問題点:PHPはありませんまだブロック型で指定しなければならない混合型の型ヒント(つまり文字列配列)をサポートしていません

+0

完全な答えをありがとう!また、混合型についても言及しています。 –

+0

おかげさまで、PHPが型をキャストしようとしているのには驚きました。これを書く前に、常に致命的なエラーが発生すると思ったので、fooの例を試してみたところ、結果には驚きました – Jelmergu

+0

型ヒントを強制し、 'declare(strict_types = 1) 'で値チェックを返すと、前の例のように実際に 'string'型でint型ではない入力引数に依存し、前の例のように' string'の代わりに真の 'bool'を返します。簡単に言えば 'declare(strict_types = 1)'を使うと安全です。 – ManInTheBox

3

PHP 7では同じであるため、必ずしも必要ではありません。もしあなたが両方を持っていれば、後にあなたがもう一方を変えずに一方を変えれば、それは同期していないかもしれません。ここで

あなたは https://wiki.php.net/rfc/scalar_type_hints_v5

関連する問題