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

インターフェイスは関数REQUIRES2パラメータを指定しましたが、派生クラスはそれらの1つをオプションにしました。インターフェイス関数の2つのバージョン(1つは1つのパラメーター、もう1つは2つのパラメーター)を宣言するか、2番目の引数をオプションとしてインターフェイス関数を定義できます。

于 2012-05-12T08:07:39.390 に答える
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 変数に割り当てます。2 番目の引数が見つかった場合は、空の場合はそれを$fhvariable に割り当て、デフォルト値の NULL を割り当てます。

于 2012-05-12T07:28:43.070 に答える