1

パラメータが文字列型である関数のパラメータとして、文字列を返す関数を渡すことができないのはなぜですか?

例えば:

function testFunction(string $strInput) {
    // Other code here...
    return $strInput;
}

$url1 = 'http://www.domain.com/dir1/dir2/dir3?key=value';
testFunction(parse_url($url1, PHP_URL_PATH));

上記のコードはエラーを返します。

キャッチ可能な致命的なエラー: testFunction() に渡される引数 1 は文字列のインスタンスである必要があります...

これどうやってするの?

4

2 に答える 2

1

PHP型ヒントは、文字列、整数、ブール値などのスカラー型をサポートしていません。現在、オブジェクト(関数プロトタイプでクラスの名前を指定することにより)、インターフェイス、配列(PHP 5.1以降)、または呼び出し可能(PHP 5.4以降)のみをサポートしています。 )。

したがって、あなたの例では、PHPは、あなたがやろうとしていることではない「文字列」と呼ばれるインターフェースを、から、または継承する、または実装するオブジェクトを期待していると考えています。

PHPタイプヒント

于 2013-03-22T01:27:01.643 に答える
1

型破りな答えですが、本当に文字列のヒントを入力したかったので、新しいクラスを作成できます。

class String
{
    protected $value;

    public function __construct($value)
    {
        if (!is_string($value)) {
            throw new \InvalidArgumentException(sprintf('Expected string, "%s" given', gettype($value)));
        }

        $this->value = $value;
    }

    public function __toString()
    {
        return $this->value;
    }
}

Javascriptスタイルで使えます

$message = new String('Hi, there');
echo $message; // 'Hi, there';

if ($message instanceof String) {
    echo "true";
}

タイプヒントの例

function foo(String $str) {

}
于 2013-03-22T01:46:25.143 に答える