2017-08-02 3 views
0
<?php 
declare(strict_types=1); 
$a = 1; 
$b = 2; 
function FunctionName(int $a, int $b) 
{ 
    $c = '10'; //string 
    return $a + $b + $c; 
} 
echo FunctionName($a, $b); 
?> 

私はFunctionName($a, $b)がエラーを出力しますが、エラーメッセージは表示されません。'strict_types = 1'は機能しないようです。

ご覧のとおり、文字列($c)をint($a+$b)に追加し、strict_types=1と宣言しました。

エラーメッセージが表示されないのはなぜですか?

+0

'宣言(strict_types = 1);なぜそれが不可能である'ない可能性が –

+0

@AlivetoDieはあなたが私を説明することができる:以下ははエラーを与えることはありませんか? – Saturn

+0

は既に重複しているリンクに記載されています: - https://stackoverflow.com/questions/37111470/enabling-strict-types-globally-in-php-7 –

答えて

1

"厳密な型"モードは、コード内の特定のポイントでのみ型をチェックします。それは変数に起こるすべてを追跡しません。

具体的には、チェック:機能に与え

  • パラメータを、タイプヒントが署名に含まれている場合、ここでは2つのintを期待する関数に2つのintを与えているので、返り値のヒントがシグネチャに含まれていれば、エラーはありません。
  • 関数の戻り値。ここにタイプヒントはありませんが、ヒントが: intの場合は、$a + $b + $cの結果が実際にintなので、エラーは発生しません。ここで

がエラーを与えないことをいくつかの例です:

declare(strict_types=1); 
$a = '1'; 
$b = '2'; 
function FunctionName(int $a, int $b) 
{ 
    return $a + $b; 
} 
echo FunctionName($a, $b); 
// TypeError: Argument 1 passed to FunctionName() must be of the type integer, string given 

または戻りヒントについて:

declare(strict_types=1); 
$a = 1; 
$b = 2; 
function FunctionName(int $a, int $b): int 
{ 
    return $a . ' and ' . $b; 
} 
echo FunctionName($a, $b); 
// TypeError: Return value of FunctionName() must be of the type integer, string returned 

注第二の例では、それは事実ではないことは、 $a . ' and ' . $bがエラーをスローすると計算されました。という文字列を返しましたが、私たちの約束は整数を返すことでした。

declare(strict_types=1); 
$a = 1; 
$b = 2; 
function FunctionName(int $a, int $b): int 
{ 
    return strlen($a . ' and ' . $b); 
} 
echo FunctionName($a, $b); 
// Outputs '7' 
+0

ありがとうございました。今私はそれをもっとはっきりと理解する。 – Saturn

関連する問題