2016-07-03 5 views
0
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; 
?> 

Fatal error: Declaration of Clasa::compara() must be compatible with Comparare::compara(Comparare $a) in D:\xammp\htdocs\php\clase\comparare\clasa.php on line 3Декларация класса должна быть совместима с интерфейсом

Я использую XAMPP 3.2.2 (PHP Version 5.5.33)

+0

Ваш код несколько путается с английскими и испанскими (?) Идентификаторами, смешанными подобным образом. Лучше придерживайтесь только английского языка для согласованности, потому что весь язык и стандартная библиотека находятся на английском языке. –

+0

Мой код написан на румынском языке. Это не проблема. –

+0

Вы не думаете, что это выглядит странно, когда половина кода на английском и половина на румынском языке? –

ответ

1

self типа в интерфейсе относится к интерфейсу - в своем классе это относится к классу. Это два разных типа. Вы должны использовать имя типа интерфейса при определении метода для соответствия типов. При реализации метода интерфейса подпись, включая типы, должна соответствовать для реализации, которую нужно подобрать.

public function compara(Comparare $a) { 
+0

Просто примечание: op меняет подпись метода, поэтому не реализует его ... – FirstOne

+0

Спасибо за подсказку, но не полностью. После изменения линии эха «maximul este:». $ Макс; в эхо "maximul este:". $ Максимизаторами> v; ,оно работает. –

+0

@ LeonardH: Это ответ на ваш вопрос. Я не запускал ваш код. –

Смежные вопросы