【发布时间】:2011-09-10 18:08:40
【问题描述】:
这个真让我头疼:
每当我尝试对传递给“字符串”类型的函数的 var 进行类型转换时,如下所示:
public function __call( string $name , array $args ) {
...
}
我收到以下错误:
可捕获的致命错误:传递给 [ClassName]::__call() 的参数 1 必须 是字符串的一个实例,字符串在 [php_file_name] 中给出 [行号]
嗯? “必须是字符串的实例,给定的字符串”?我没有传递一个字符串吗?我真的不明白这个错误信息。
现在我的解决方案一直是这样的:
public function __call( $name , array $args ) {
if (!is_string($name)) { throw new Exception('$name must be a string');
}
但是,我的问题是,有没有办法在方法定义中而不是在方法本身中实际进行类型转换?
【问题讨论】:
-
更正,这不是类型转换,而是类型提示
-
Aareon - 不,这里没有强制强制转换的方法。类型提示 expects 一个字符串,这就是它的工作原理。它不会转换它们。为什么你首先要传递一个非字符串?
-
向我们展示您用于调用
__call()的代码。特别是变量通过了。 -
@ajreal 啊,是的,这就是我的意思,类型提示,类型转换正在定义要“评估为”的变量,我知道 :) 对不起,我的错
-
@Aareon 在上面的例子中,这实际上不会发生(魔术方法),但它只是一个关于面对这个错误的一般问题,方法可能是:doAnything(string $name,数组 $value) 用于所有强烈目的