为什么我不能传递返回字符串的函数作为函数的参数,其中参数是字符串类型?



为什么我不能传递一个返回字符串的函数,作为函数的参数,其中参数是字符串类型?

例如:

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必须是string…的实例

我该怎么做?

PHP类型提示不支持标量类型,如字符串、整数、布尔值等。它目前只支持对象(通过在函数原型中指定类名)、接口、数组(PHP 5.1起)或可调用对象(PHP 5.4起)。

所以在你的例子中,PHP认为你期望一个对象来自,或继承,或实现一个名为"string"的接口,这不是你想做的。

PHP类型提示

一个非常规的答案,但是您确实想为字符串输入hint,您可以为它创建一个新类。

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";
}

Typehint例子

function foo(String $str) {
}

相关内容

  • 没有找到相关文章

最新更新