您好我有一个非常简单的类来实现一个接口。类和接口都在同一个文件中。
当我实现接口时,我得到一个致命的错误“Class not found”,但是当我删除工具然后尝试使用该类时我可以使用它很好???
有人可以就此提出任何建议吗?
很抱歉,这是我目前用来测试的一些代码:
$tester = new TypeOneTester();
$tester->test("Hello");
interface iTestInterface
{
public function test($data);
}
class TypeOneTester implements iTestInterface
{
public function test($data)
{
return $data;
}
}
答案 0 :(得分:10)
在定义类和接口之后创建类的实例,而不是之前。
在这种情况下,定义的顺序应为:
答案 1 :(得分:5)
这是一个(非常糟糕的)记录限制:
http://php.net/manual/pl/migration5.incompatible.php
在某些情况下,必须在使用前声明类。只有在使用PHP 5的某些新功能(例如接口)时才会发生这种情况。否则行为是旧的。
我已经提交了一份错误报告。 IMO它应该被修复,因为它的行为不一致,并且错误消息对于任何假设我认为PHP根本不关心您声明函数/类的地方的人没有帮助。来吧,它已经存在了10多年了......
答案 2 :(得分:3)
重现代码
interface I {}
$a = new A;
$b = new B;
class A {
function __construct() { echo 'A'; }
}
class B implements I {
function __construct() { echo 'B'; }
}
预期
AB
实际值:
A
Fatal error: Class 'B' not found...
答案 3 :(得分:2)
那是因为,php加载接口,并且实例化类类对象,其中有一定的顺序并且必须在Php文件中,如果文件不符合顺序1. Require_one接口,2。Require_one类
答案 4 :(得分:-1)
首先,您必须检查 require_once (或 include ) 界面可以先加载您的课程php文件
require_once 'classes/I3D.php';
require_once 'classes/book.php';