函数参数中的类型提示(magic __call)抛出异常

时间:2011-09-10 18:08:40

标签: php string casting

这个真让我头晕目眩:

每当我尝试对传递给'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');
}

但是,我的问题是,有没有办法在方法定义中而不是在方法本身内部对它进行类型转换?

2 个答案:

答案 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

然而,它很慢,我不建议使用它。