web-dev-qa-db-ja.com

php:関数の引数タイプを宣言します

私は、宣言された引数型で関数を作成して、それらが正しい形式であるかどうかをすぐに確認しようとしていますが、文字列を返すとき、このエラー:

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);

間違いはどこですか?

23
oscurodrago

PHP5ドキュメント によると:

タイプヒントはオブジェクトと配列(PHP 5.1)以降)のみです。intと文字列を使用した従来のタイプヒントはサポートされていません。

stringintはクラスではないため、関数でそれらを「タイプヒント」することはできません。

PHP 7.0現在、引数の型をstring、int、float、boolとして宣言しています。

42
ldiqual

これはPHP 7

PHP 7では、型を宣言できるようになりました。詳細については、次のリンクを参照してください。

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

function(string $name, boolean $is_admin) {
    //do something
}
12
Amal Ajith

あなたはいつも私のために働いているこのようなことをすることができます

ひも用

function setData($Name=""){ }

これにより、名前が文字列になります。文字列かどうかはチェックされません。

数値用

function setData($age=0){ }

これにより、年齢は強制的に数値になります。文字列が渡されると、値は0になります

配列値には、2つのバリエーションがあります

function setData(array $data){ } 

配列が渡されない場合、エラーがスローされます

function setData($data=array()){ } 

これは、$dataに値が指定されていない空の配列を渡します

7
Smith

PHPマニュアル によれば、array onPHP 5.1以降およびstringおよびintは、PHP 7以降でタイプします。見てみましょう:

  • Class/interface nameパラメーターは、指定されたクラスまたはインターフェース名のインスタンスでなければなりません。 PHP 5.0.0
  • selfパラメーターは、メソッドが定義されているクラスと同じクラスのインスタンスでなければなりません。これは、クラスおよびインスタンスメソッドでのみ使用できます。 PHP 5.0.0
  • arrayパラメーターは配列でなければなりません。 PHP 5.1.0

  • callableパラメーターは有効な呼び出し可能オブジェクトでなければなりません。 PHP 5.4.0
  • boolパラメーターはブール値でなければなりません。 PHP 7.0.0
  • floatパラメーターは浮動小数点数でなければなりません。 PHP 7.0.0
  • intパラメーターは整数でなければなりません。 PHP 7.0.0

  • stringパラメーターは文字列でなければなりません。 PHP 7.0.0

  • iterableパラメーターは、配列またはTraversableのインスタンスでなければなりません。 PHP 7.1.0
3
Machado

stringintおよびその他の組み込み型は、引数のclassesではなく、引数でclassを指定します。そこに配置できる唯一のサポートされている組み込み型は、arrayです。

1
devdRew

タイプをstringおよびintとして定義することはできません。 PHP「わからない」」.

0
Aurelio De Rosa

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
0

タイプヒントを使用する必要がある場合は、次のようにします。

<?php 
declare(strict_types=1);
0
fdiaz7