使用这些简单的代码,我正在从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';
}
}
?>
如您所见,这是非常简单的代码,它应该可以毫无问题地运行,但有时它会引发致命错误:
致命错误:未捕获错误:未找到类“测试”
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
为什么会这样?与代码有关吗?
编辑: 如果我在这些类之后创建实例,则可以正常工作,但是我想知道为什么有时(并非总是)发生这种情况,以及为什么一次刷新该错误就消失了?
答案 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();
?>