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

时间:2013-03-22 01:20:58

标签: php method-parameters

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

例如:

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必须是字符串的实例...

我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

因此,在您的示例中,PHP认为您期望一个来自或继承的对象,或者实现一个名为“string”的接口,这不是您想要做的。

PHP Type Hinting

答案 1 :(得分: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";
}

Typehint示例

function foo(String $str) {

}