我收到 fatal error : fatal error :在第 5 行 .../Foo2.php 中找不到类“Foo1”
,其中包含以下文件:
index.php:
<?php
require_once("./Foo1.php");
?>
<h1>Success</h1>
Foo1.php:
<?php
require_once('./IFoo.php');
require_once('./Bar.php');
class Foo1 implements IFoo
{
/** @var Bar */
private $bar;
}
IFoo.php:
<?php
interface IFoo {
}
Bar.php:
<?php
require_once('./Foo2.php');
class Bar {
/** @var Foo2 */
private $foo;
}
Foo2.php:
<?php
require_once("./Foo1.php");
class Foo2 extends Foo1
{
}
问题:
- 如何解决这种情况?
- 为什么当我抑制
implements IFoo
语句时,此代码有效?
更新 大多数提出的解决方案都涉及自动加载。不幸的是,我的问题是在一个旧项目上,其中有很多现有代码和很多不好的做法。我们离 PSR-0 标准还很远。
引入自动加载在性能方面的成本是多少?
最佳答案
如果将 Foo1.php 文件修改为此
<?php
require_once('./IFoo.php');
class Foo1 implements IFoo
{
/** @var Bar */
private $bar;
}
require_once('./Bar.php');
?>
这有效。
原因是PHP是解释性语言(解释器逐行执行脚本)。 因此,在您的情况下,解释器会错过 Foo1 声明语句,并在 Foo2.php 中遇到未定义的类 Foo1 时引发错误。
关于PHP - require_once 和类继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18665202/