PHP - require_once 和类继承问题

标签 php class require-once

我收到 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
{
}

问题:

  1. 如何解决这种情况?
  2. 为什么当我抑制 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/

相关文章:

javascript - 显示输入类型文本的数量等于我的输入文件中选定文件的数量,无需发送表单

php - 想做产品过滤器,但我得到错误

PHP 检查 require_once() 内容是否为空

php - 如何在下拉菜单中创建两列

php - 如何将非英语字符(如阿拉伯语或波斯语字符)写入图像?

css - css的变量类名

linux - Linux 进程间共享类对象

php - 从 youtube channel 获取 3 最后一个视频

php - 如何加快 1800 行 PHP 包含的速度?它使我的页面加载速度减慢到 10 秒/ View

PHP/xdebug 分析器 require_once 性能不佳