首页 > 解决方案 > 继承:找不到父级

问题描述

我已经在这个问题上打破了几个小时,我似乎无法弄清楚为什么这不起作用。我有两个 php 类

<?php
class Mother
{
    public function __construct()
    { }
}

还有孩子班。

<?php
require_once('Mother.php');
class Child extends Mother
{
    public function __construct()
    {
        parent::__construct();
    }
}

这些类位于单独的文件中,我在此示例中对它们进行了极大的简化。

根据我所知道的以及我在其他几个关于 SO 的问题中发现的内容,这应该可以正常工作。但我得到这个错误:

致命错误:在第 4 行的子类路径中找不到类“母亲”

我应该继续寻找任何解决方案或想法吗?

编辑:两个文件都在同一个文件夹中

编辑:在类声明之前添加了一个调试该文件被调用了 4 次和 3 次,其中 Mother 类存在但有一次它不是引发致命错误(即使当我使用子类时母班在场)

编辑:现在我刚刚删除了扩展并将继承的函数放在子类中,这样我就可以继续工作了。当我找到它时,我会发布解决方案。

标签: phpoopinheritance

解决方案


问题是你的require_once陈述

您正在使用相对地址,这似乎是正确的做法,但实际上是相对于服务器已联系的文件而不是子类

所以假设 root/index.php

Require_once "Child.php"

并假设 root/classes/Child.php

Require_once "Parent.php"

在这种情况下,它将在root文件夹而不是classes文件夹中查找父级

你有 2 个选项 1 使用__DIR__变量

IE

Require_once __DIR__ . "/Parent.php"

这将强制要求使用文件所在的文件夹,而不是原始调用所在的文件夹

另一种选择是使用看起来像这样的自动加载器

<?php
    spl_autoload_register(function ($class) {
        $fname = __DIR__ . '/classes/' . $class . '.php';
        if(file_exists($fname))
        {
            include_once($fname);
        }
    })

?>

然后这将指示 php 在类文件夹中查找任何未知类并将它们加载到系统中


推荐阅读