2017-10-07 14 views
0

trueまたはfalseを返すメソッドがありますが、型宣言isAdmin() : stringを追加すると致命的なエラーは発生しません。strict_typesが含まれていると動作しません

私はdeclare(strict_types=1);がクラスの前に含まれる2番目のファイルにあります。 例:

file1.php

<?php 
declare(strict_types=1); 

file2.php

<?php 
include "file1.php"; 

class Test 
{  
    public function user() : int 
    { 
     return true; 
    } 
} 

$test = new Test(); 
var_dump($test->user()); 

このコードは致命的なエラーがスローされません。代わりに、var_dumpはboolをint(1)として返します。メソッドの型を文字列に変更すると、var_dumpはboolをstring(1) "1"として返します。

declare(strict_types=1);をすべてのモデルファイルに入れないようにするにはどうすればよいですか?

+0

つまり、関数は文字列を返し、ブール値を返します。 –

+1

@headmax彼は 'strict_types'が有効になっていると、なぜこれがなぜ合格と尋ねていると思います。この例では__should__は失敗しますが、明らかにそのパスは失敗します。 – Carey

+0

さらに、if文をスキップすることもできます。戻り値はisset($ this-> type)&& $ this-> type == 3' – Carey

答えて

2

現在、厳密な型定義をPHPでグローバルに宣言することはできません。 manual

そして

厳密な型指定が厳密な型指定を持つファイル内からの呼び出しを機能するように適用されるファイル単位でstrictモードを有効にすることが可能ですそのファイル内で宣言されている関数には適用されません。厳密な型指定が有効になっていないファイルが厳密な型指定を持つファイルで定義された関数を呼び出すと、呼び出し元の設定(弱い型指定)が尊重され、値が強制的に変更されます。

私の推測では、これは部分的にパッケージ間の互換性を維持することでした。グローバルに使用していて、使用しているパッケージによって厳密な入力が必要な場合はどうすればよいですか?

これまで使用していたすべてのファイルでそれを宣言する必要があります。

+1

技術的な部分が正しいので、Upvoted。しかし、参考までに、これは決して互換性に関するものではなく、単に「今」のものではなく、あなたが追加している意見です。 – Narf

+0

あなたは絶対に正しいです。私はそれをどこで読んでいるのか覚えていませんが、マニュアルにはありません。私はそれを編集します。 – ishegg

+0

ありがとう!今は使っていないと思う。 – pidari

関連する問題