首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么找不到我的界面?

为什么找不到我的界面?
EN

Stack Overflow用户
提问于 2018-05-03 11:38:32
回答 1查看 4.9K关注 0票数 2

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

这是我在index.php的代码

代码语言:javascript
复制
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类文件:

代码语言:javascript
复制
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;
    }
}

这是在这个类文件中调用的接口:

代码语言:javascript
复制
interface OperatorInterface
{
    public function run($number,$result);
}

这是类Adder,它从index.php调用

代码语言:javascript
复制
class Adder implements OperatorInterface
{
    public function run($number,$result)
    {
        return $result + $number;
    }
}

就像你看到的,它看起来很漂亮,好吧……然而,我得到了这个奇怪的错误:

致命错误:在第2行OperatorInterface中找不到接口“Adder.php”

所以Adder类的第2行是:

代码语言:javascript
复制
class Adder implements OperatorInterface

这意味着我没有正确地包含接口。但我也包括了。

那我为什么要犯这个错误呢?

我在哪里犯了错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-03 11:45:26

您需要在Operator.interface.php文件之前包含Adder.class.php文件,否则当编译器进入Adder类时,它还没有遇到任何称为OperatorInterface的东西,因此它无法识别它,也无法验证声明Adder类实现它是有效的。由于Calculator类中也引用了它,所以您也应该在此之前包含它。

代码语言:javascript
复制
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';

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50154171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档