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 回答