我在PHP 5.1.6中遇到以下错误:
Fatal error: Declaration of Tl1Telnet::ExecuteCommand() must be compatible with that of telnet::ExecuteCommand()
ExecuteCommand在接口中正确定义。
interface telnet {
public function DoTelnet();
public function ExecuteCommand($command,$fh);
}
class Tl1Telnet implements telnet{
public function ExecuteCommand($command,$fh = NULL){
fputs($this->socketResource,$command);
sleep(2);
$tl1_string = fread($this->socketResource,30000);
if($fh != NULL){
fwrite( $fh, $tl1_string );
}
return $tl1_string;
}
}
答案 0 :(得分:1)
尝试从实施中删除$fh = NULL
。这可能导致问题。因为错误明确指出Declaration of Tl1Telnet::ExecuteCommand() must be compatible with that of telnet::ExecuteCommand()
我不确定错误产生的原因是什么。你可能应该升级你的PHP版本,如果没有,那么尝试使用下面演示的解决方法。
实施例
接口中的将参数设置为空。
interface telnet {
public function DoTelnet();
public function ExecuteCommand();
}
并在派生类中。
public function ExecuteCommand() {
$numberOfArgs = func_num_args();
if($numberOfArgs <= 0) {
throw new Exception('Missing Argument 1');
}
$command = func_get_arg(0);
$fh = ($numberOfArgs == 2) ? func_get_arg(1) : NULL;
}
如果第一个参数为空,则会抛出错误。如果不是,它将获取第一个参数并将其分配给$ command变量。如果它找到第二个参数,那么它会将它分配给$fh
变量,如果为空,则分配默认值NULL。
答案 1 :(得分:1)
接口指定了函数REQUIRES 2参数,但是派生的类别使其中一个可选。您可以声明2个版本的接口函数(一个带有1个参数,另一个带有2个参数),或者您可以将接口函数定义为第二个参数是可选的。