为什么我不能传递一个返回字符串的函数,作为函数的参数,其中参数的类型为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必须是字符串的实例...
我该怎么做?
答案 0 :(得分:1)
PHP类型提示不支持标量类型,如字符串,整数,布尔值等。它只支持对象(通过在函数原型中指定类的名称),接口,数组(自PHP 5.1起)或可调用(自PHP 5.4)。
因此,在您的示例中,PHP认为您期望一个来自或继承的对象,或者实现一个名为“string”的接口,这不是您想要做的。
答案 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) {
}