类声明必须与接口

时间:2016-07-03 14:48:26

标签: php

Comparare.php
    <?php
    interface Comparare{
    public function compara(self $a);
    }
    ?>

clasa.php
<?php
class Clasa implements Comparare{
    public $v;
    public function compara(self $a){
        if($this->v < $a->v)
        {
            return -1;
        }
        else if($this->v==$a->v)
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }
    function __construct($a){
        $this->v=$a;
    }
}
?>
test.php
<?php
function __autoload($class_name){
    require_once ($class_name) . ".php";
}
function maxim(Comparare $a,Comparare $b){
    if ($a->compara($b)<0){
        return $b;
    }
    else {
        return $a;
    }
}
$x=new Clasa(7);
$y=new Clasa(8);
$max=maxim($x,$y);
echo "maximul este:" . $max;
?>
  

致命错误:Clasa :: compara()的声明必须兼容   Comparare :: compara(Comparare $ a)in   第3行的D:\ xammp \ htdocs \ php \ clase \ comparare \ clasa.php

我使用XAMPP 3.2.2(PHP版本5.5.33)

1 个答案:

答案 0 :(得分:1)

界面中的self类型是指接口 - 在您的类中它引用了类。这是两种不同的类型。定义方法时需要使用接口类型名称才能匹配类型。实现接口方法时,签名(包括类型)必须与要拾取的实现相匹配。

public function compara(Comparare $a) {