私は、宣言された引数型で関数を作成して、それらが正しい形式であるかどうかをすぐに確認しようとしていますが、文字列を返すとき、このエラー:
Catchable fatal error: Argument 2 passed to myfunction() must be an instance of string, string given, called in path_to_file on line 69 and defined in path_to_file on line 49
例
function myfunction( array $ARRAY, string $STRING, int $INTEGER ) {
return "Args format correct";
}
myfunction(array("1",'2','3','4'), "test" , 1234);
間違いはどこですか?
PHP5ドキュメント によると:
タイプヒントはオブジェクトと配列(PHP 5.1)以降)のみです。intと文字列を使用した従来のタイプヒントはサポートされていません。
string
とint
はクラスではないため、関数でそれらを「タイプヒント」することはできません。
PHP 7.0現在、引数の型をstring、int、float、boolとして宣言しています。
これはPHP 7
PHP 7では、型を宣言できるようになりました。詳細については、次のリンクを参照してください。
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
function(string $name, boolean $is_admin) {
//do something
}
あなたはいつも私のために働いているこのようなことをすることができます
ひも用
function setData($Name=""){ }
これにより、名前が文字列になります。文字列かどうかはチェックされません。
数値用
function setData($age=0){ }
これにより、年齢は強制的に数値になります。文字列が渡されると、値は0になります
配列値には、2つのバリエーションがあります
function setData(array $data){ }
配列が渡されない場合、エラーがスローされます
function setData($data=array()){ }
これは、$data
に値が指定されていない空の配列を渡します
PHPマニュアル によれば、array
onPHP 5.1以降およびstring
およびint
は、PHP 7以降でタイプします。見てみましょう:
Class/interface name
パラメーターは、指定されたクラスまたはインターフェース名のインスタンスでなければなりません。 PHP 5.0.0self
パラメーターは、メソッドが定義されているクラスと同じクラスのインスタンスでなければなりません。これは、クラスおよびインスタンスメソッドでのみ使用できます。 PHP 5.0.0
array
パラメーターは配列でなければなりません。 PHP 5.1.0
callable
パラメーターは有効な呼び出し可能オブジェクトでなければなりません。 PHP 5.4.0bool
パラメーターはブール値でなければなりません。 PHP 7.0.0float
パラメーターは浮動小数点数でなければなりません。 PHP 7.0.0
int
パラメーターは整数でなければなりません。 PHP 7.0.0
string
パラメーターは文字列でなければなりません。 PHP 7.0.0
iterable
パラメーターは、配列またはTraversableのインスタンスでなければなりません。 PHP 7.1.0string
、int
およびその他の組み込み型は、引数のclassesではなく、引数でclassを指定します。そこに配置できる唯一のサポートされている組み込み型は、array
です。
タイプをstring
およびint
として定義することはできません。 PHP「わからない」」.
PHP 7.xを使用していない場合、または複雑な引数検証(配列または\ Traversableなど)が必要な場合トラバーサル可能なインターフェイス) args module from Non-standard PHP library(NSPL) を使用できます。
use const \nspl\args\numeric;
use function \nspl\args\expects;
function sqr($x)
{
expects(numeric, $x);
return $x * $x;
}
sqr('hello world');
出力:
InvalidArgumentException: Argument 1 passed to sqr() must be numeric, string given in /path/to/example.php on line 17
Call Stack:
0.0002 230304 1. {main}() /path/to/example.php:0
0.0023 556800 2. sqr() /path/to/example.php:17
タイプヒントを使用する必要がある場合は、次のようにします。
<?php
declare(strict_types=1);