为什么找不到我的界面?

时间:2018-05-03 11:38:33

标签: php require

我正在学习PHP OOP,现在我构建了一个基本的计算器。

以下是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

Adder Class的第2行是这样的:

class Adder implements OperatorInterface

这意味着我没有正确包含界面。但我确实包括了那个。

那我为什么会收到这个错误?

我在哪里弄错了?

1 个答案:

答案 0 :(得分:3)

您需要在app.get('/register', function (req, res) { res.render('register') }); 文件之前包含Operator.interface.php文件,否则当编译器到达Adder.class.php类时,它还没有遇到任何名为Adder的文件,因此它无法识别它并且无法验证声明Adder类是否实现它是有效的。由于它也在OperatorInterface类中引用,因此您也应该在此之前包含它。

Calculator

应该很简单 - 为了将来参考,你应该总是订购你的包含,以便满足它们之间的依赖关系,因为它们按你提供的顺序进行处理。