PHP界面问题 - 找不到类

时间:2010-09-13 22:18:09

标签: php interface

您好我有一个非常简单的类来实现一个接口。类和接口都在同一个文件中。

当我实现接口时,我得到一个致命的错误“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;
    }
}

5 个答案:

答案 0 :(得分:10)

在定义类和接口之后创建类的实例,而不是之前。

在这种情况下,定义的顺序应为:

  1. 接口
  2. 班级(对象)实例

答案 1 :(得分:5)

这是一个(非常糟糕的)记录限制:

http://php.net/manual/pl/migration5.incompatible.php

在某些情况下,必须在使用前声明类。只有在使用PHP 5的某些新功能(例如接口)时才会发生这种情况。否则行为是旧的。

我已经提交了一份错误报告。 IMO它应该被修复,因为它的行为不一致,并且错误消息对于任何假设我认为PHP根本不关心您声明函数/类的地方的人没有帮助。来吧,它已经存在了10多年了......

https://bugs.php.net/bug.php?id=69665

答案 2 :(得分:3)

闻起来像是php中的一个bug。确保它可以使用最新版本重现并发布到bugs.php.net。

重现代码

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';