为什么找不到我的界面?
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 文件:
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;
}
}
这是在此 class 文件中调用的接口:
interface OperatorInterface
{
public function run($number,$result);
}
这是从 index.php
:
调用的 class Adder
class Adder implements OperatorInterface
{
public function run($number,$result)
{
return $result + $number;
}
}
如您所见,它看起来不错......但是我收到了这个奇怪的错误:
Fatal error: Interface 'OperatorInterface' not found on line 2 Adder.php
所以 Adder
Class 的第 2 行是这样的:
class Adder implements OperatorInterface
这意味着我没有正确包含接口。但我确实包括了这一点。
为什么我会收到这个错误?
我哪里弄错了?
你需要在Adder.class.php
文件之前包含Operator.interface.php
文件,否则当编译器到达Adder
class时,它还没有遇到任何东西称为 OperatorInterface
,因此它无法识别它并且无法验证声明 Adder class 实现它是否有效。由于它也在 Calculator
class 中引用,因此您也应该在此之前包含它。
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';
应该就是这么简单 - 为了将来参考,您应该始终对包含的内容进行排序,以便满足它们之间的依赖关系,因为它们会按照您提供它们的顺序进行处理。
我正在学习 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 文件:
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;
}
}
这是在此 class 文件中调用的接口:
interface OperatorInterface
{
public function run($number,$result);
}
这是从 index.php
:
Adder
class Adder implements OperatorInterface
{
public function run($number,$result)
{
return $result + $number;
}
}
如您所见,它看起来不错......但是我收到了这个奇怪的错误:
Fatal error: Interface 'OperatorInterface' not found on line 2 Adder.php
所以 Adder
Class 的第 2 行是这样的:
class Adder implements OperatorInterface
这意味着我没有正确包含接口。但我确实包括了这一点。
为什么我会收到这个错误?
我哪里弄错了?
你需要在Adder.class.php
文件之前包含Operator.interface.php
文件,否则当编译器到达Adder
class时,它还没有遇到任何东西称为 OperatorInterface
,因此它无法识别它并且无法验证声明 Adder class 实现它是否有效。由于它也在 Calculator
class 中引用,因此您也应该在此之前包含它。
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';
应该就是这么简单 - 为了将来参考,您应该始终对包含的内容进行排序,以便满足它们之间的依赖关系,因为它们会按照您提供它们的顺序进行处理。