为什么我不能传递一个返回字符串的函数,作为函数的参数,其中参数是字符串类型?
例如: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) {
}