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


Type hinting in function argument (magic __call) throw exception

这个真让我头疼:

每当我试图对传递给'string'类型函数的var进行类型转换时,就像这样:

public function __call( string $name , array $args ) {
    ...
}

我得到以下错误:

可捕获的致命错误:参数1传递给[ClassName]::__call()必须是string的一个实例,string在[php_file_name]中给出(line_number)

啊?"必须是字符串的一个实例,字符串给定"?我没有传递一个字符串吗?我真的不明白这个错误信息。

现在我的解决方案一直是这样的:

public function __call( $name , array $args ) {
    if (!is_string($name)) { throw new Exception('$name must be a string');
}

然而,我的问题是,是否有一种方法可以在方法定义中而不是在方法本身中进行类型转换?

在php中,你可以强制函数参数为数组或对象(类型提示)。所以你的动作只接受"字符串"对象作为第一个参数,而不是字符串类型的变量。

类型提示只能是对象和数组类型(从PHP 5.1开始)。不支持使用int和string的传统类型提示。

更多信息在这里:http://www.php.net/manual/en/language.oop5.typehinting.php

回答你的问题:通常,你不能!

PHP不支持标量类型提示。仅适用于对象和数组。php注释中有人写了一种使用标量类型提示的方法。因为这个错误的类型是catchable fatal error。你可以定义自己的错误处理程序,它可以让你在某些情况下继续处理这个错误。

http://www.php.net/manual/de/language.oop5.typehinting.php # 83442

但是,它非常慢,我不建议使用它