0

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;
}
}
4

2 回答 2

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。

于 2012-05-12T07:28:43.070 回答
1

接口指定了函数 REQUIRES 2 个参数,但您的派生类将其中一个参数设为可选。您可以声明 2 个版本的接口函数(一个带有 1 个参数,另一个带有 2 个参数),或者您可以将接口函数定义为第二个参数是可选的。

于 2012-05-12T08:07:39.390 回答