繁体   English   中英

为什么找不到我的界面?

[英]Why is my interface not found?

我正在学习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);
}

这是从index.php调用的Adder类:

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

如您所见,它看起来不错而且还可以...但是我收到了这个奇怪的错误:

致命错误:在第2行Adder.php上找不到接口'OperatorInterface'

所以Adder Class的第2行是这样的:

class Adder implements OperatorInterface

这意味着我没有正确包含接口。 但是我确实包括了这一点。

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

我在哪里弄错了?

您需要在Adder.class.php文件之前包含Operator.interface.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';

它应该这么简单-为了将来参考,您应该始终对包含进行排序,以便满足它们之间的依赖关系,因为它们将按照您提供它们的顺序进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM