这个真让我头晕目眩:
每当我尝试对传递给'string'类型函数的var进行类型转换时,就像这样:
public function __call( string $name , array $args ) {
...
}
我收到以下错误:
捕获致命错误:传递给[ClassName] :: __ call()的参数1必须 是[php_file_name]在线上给出的字符串,字符串的实例 [LINE_NUMBER]
咦? “必须是字符串的实例,给出字符串”?我没有传过字符串吗?我真的不明白这个错误信息。
现在我的解决方案一直是这样的:
public function __call( $name , array $args ) {
if (!is_string($name)) { throw new Exception('$name must be a string');
}
但是,我的问题是,有没有办法在方法定义中而不是在方法本身内部对它进行类型转换?
答案 0 :(得分:4)
在php中,您可以强制函数参数为数组或对象(类型提示)。所以你的动作只接受第一个参数的“字符串”对象,而不是字符串类型的变量。
类型提示只能是对象和数组(自PHP 5.1以来)类型。不支持使用int和string的传统类型提示。
此处有更多信息:http://www.php.net/manual/en/language.oop5.typehinting.php
并回答你的问题:通常,你不能!
答案 1 :(得分:1)
PHP不支持标量类型提示。仅适用于对象和数组。 PHP-comments的某个人写了一种使用标量类型提示的方法。因为此错误属于catchable fatal error
类型。您可以定义自己的错误处理程序,以便在某些条件下继续此错误。
http://www.php.net/manual/de/language.oop5.typehinting.php#83442
然而,它很慢,我不建议使用它。