PHP 5.1.6接口问题

时间:2012-05-12 07:26:24

标签: php

我在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;
}
}

2 个答案:

答案 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个参数),或者您可以将接口函数定义为第二个参数是可选的。