定义了类,但出现致命错误:未捕获的错误:找不到类

时间:2018-12-26 06:14:49

标签: php

使用这些简单的代码,我正在从PHP获得非常奇怪的响应:

test3.php:

<?php

//my test3.php file

?>

test.php:

<?php

require_once(dirname(__FILE__).'/test3.php');

$a = new testing();
echo $a->returnit();

class testing extends test2{
    public function __construct($test=1){
        parent::__construct();
    }
}

class test2{
    public function __construct(){
    }

    public function returnit(){
        return 'Tester';
    }
}

?>

如您所见,这是非常简单的代码,它应该可以毫无问题地运行,但有时它会引发致命错误:

  

致命错误:未捕获错误:未找到类“测试”

Fatal Error

PHP和Apache版本:

服务器版本:Apache / 2.4.29(Ubuntu)

服务器内置:2018-10-10T18:59:25

PHP 7.2.10-0ubuntu0.18.04.1(cli)(内置:2018年9月13日13:45:02)(NTS)

具有Zend OPcache v7.2.10-0ubuntu0.18.04.1的Zend Engine v3.2.0

为什么会这样?与代码有关吗?

编辑: 如果我在这些类之后创建实例,则可以正常工作,但是我想知道为什么有时(并非总是)发生这种情况,以及为什么一次刷新该错误就消失了?

2 个答案:

答案 0 :(得分:2)

manual指出:

  

类应该在实例化之前定义(在某些情况下这是必需的)

,这似乎是其中一种情况(不幸的是,该手册并未提供有关具体情况的任何指导)。请注意,如果仅更改类定义的顺序,代码也可以正常工作。 Demo on 3v4l.org

答案 1 :(得分:0)

是的,这很奇怪,因为您的代码在我的本地计算机上可以完美运行

我尝试进行一些较小的更改,如下所示。你可以这样尝试吗

test.php

  <?php

require_once(dirname(__FILE__).'/test3.php');

class testing extends test2{
    public function __construct($test=1){
        parent::__construct();
    }
}

class test2{
    public function __construct(){
    }

    public function returnit(){
        return 'Tester';
    }
}

?>

test3.php

<?php

$a = new testing();
echo $a->returnit();

?>