Почему мой интерфейс не найден? - PullRequest
0 голосов
/ 03 мая 2018

Я изучаю PHP ООП и сейчас я создал базовый калькулятор.

Вот мой код на index.php:

require_once 'Calculator.class.php';
require_once 'Adder.class.php';
require_once 'Substract.class.php';
require_once 'Operator.interface.php';
require_once 'Multiplier.class.php';
require_once 'Devider.class.php';

$c = new Calculator;

$c->setOperation(new Adder);
$c->calculate(10,50); // 60

echo $c->getResult();

А это файл класса Calculator:

class Calculator
{
    protected $result;
    protected $operation;
    public function setOperation(OperatorInterface $operation)
    {
        $this->operation = $operation;
        // var_dump($operation);        
    }
    public function calculate()
    {
        foreach(func_get_args() as $number)
        {
            $this->result = $this->operation->run($number,$this->result);
        }
    }
    public function getResult()
    {
        return $this->result;
    }
}

И это интерфейс, который вызывается в этом файле класса:

interface OperatorInterface
{
    public function run($number,$result);
}

А это класс Adder, который вызывается из index.php:

class Adder implements OperatorInterface
{
    public function run($number,$result)
    {
        return $result + $number;
    }
}

Как вы можете видеть, это выглядит хорошо и хорошо ... однако я получаю эту странную ошибку:

Неустранимая ошибка: интерфейс «OperatorInterface» не найден в строке 2 Adder.php

Итак, строка 2 из Adder Класс такой:

class Adder implements OperatorInterface

Это означает, что я неправильно включил интерфейс. Но я включил это.

Так почему я получаю эту ошибку?

Где я допустил ошибку?

1 Ответ

0 голосов
/ 03 мая 2018

Вам необходимо включить файл Operator.interface.php перед файлом Adder.class.php, в противном случае, когда компилятор попадает в класс Adder, он еще не обнаружил ничего, называемого OperatorInterface, поэтому он не распознает его. и не может проверить, что допустимо объявить, что класс Adder реализует его. Так как на него также ссылаются в классе Calculator, вы должны включить его и до этого.

require_once 'Operator.interface.php';
require_once 'Calculator.class.php';
require_once 'Adder.class.php';
require_once 'Substract.class.php';
require_once 'Multiplier.class.php';
require_once 'Devider.class.php';

Это должно быть так просто - для дальнейшего использования вы всегда должны упорядочивать свои включения, чтобы можно было удовлетворить зависимости между ними, поскольку они обрабатываются в том порядке, в котором вы их предоставляете.

...