私は混合型のパラメータを取るPHP 7関数を定義したいと思います。 (私が望むのは、C#のジェネリック型パラメータに相当します;もしPHP 7でそれをエミュレートするより良い方法があれば教えてください)PHP 7:私自身の関数で混合パラメータ型を使用するには?
私のコードは以下の通りです。
<?php
declare (strict_types = 1);
function test (mixed $s) : mixed {
return $s;
}
// Works
echo gettype ('hello');
// Does not work
echo test ('hello');
?>
このコードを実行すると、次のようになります。
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of mixed, string given, called in mixed.php on line 11 and defined in mixed.php:4
Stack trace:
#0 mixed.php(11): test('hello')
#1 {main}
thrown in mixed.php on line 4
私はテスト()の呼び出しをコメントアウトした場合、コードは正常に動作しますので、私は、関数宣言で混合パラメータの型を使用するために明らかにそれは少なくとも大丈夫です。
gettype()などの組み込みのPHP関数は、混合パラメータを取ることができますが、厳密な型指定を内部的に使用しているかどうかはわかりません。
「混合」もPHP documentationの疑似型として使用されているので、「混合」をPHPキーワードとして誤解する可能性がありますが、少なくともここで私が見ているのは、正当なキーワードです。私はそれを意図していない方法で単に使用していますか?
最後に、パラメータタイプを指定しないだけですべてを回避することができましたが、すべてのパラメータと戻り値の型を指定して一貫性を持たせたいと思います。
ありがとうございました。追加情報を提供できるかどうかお知らせください。
上に述べたようにも、このために働くはい、 'mixed'は実数型ではありません。一貫性を保つことは、ここでの適切なセマンティクスとは直交しています。 – mario
FYI mixedはタイプではありません。 (http://php.net/manual/en/language.pseudo-types.php)**疑似型**:任意のTypeがMethodに渡される、またはMethodから返される可能性があるというヒント。おそらく何らかの理由で混在しているような型付けされた変数の場合... C#とは異なり、あなたが達成しようとしているのは、特にstrict_typesをtrueに設定した** PHPです。ただし、タイプヒントを指定しない限り、メソッドは任意のタイプを受け入れることができます。しかし、C#のプログラマーにとっては、まだ悪い** PHPのジュースです** – Poiz
非常にマリオとポイズありがとうございます。私はちょうど/ *混合* /をコメントとして追加するために解決するように見えます。 – FSharpN00b