继承:找不到父

时间:2018-04-26 15:01:01

标签: php oop inheritance

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

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

和孩子一起上课。

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

这些类是单独的文件,我已经为这个例子大大简化了它们。

根据我所知道的以及我在其他几个问题上找到的内容,这应该可行。但是我得到了这个错误:

  

致命错误:第4行路线中的儿童班未找到班级“母亲”

我应该继续关注的任何解决方案或想法?

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

编辑:在类声明之前添加了一个调试 该文件被调用4次,并且是Mother类存在的3次 但有一次并没有引发致命的错误(即使在我使用儿童班时母班也在场)

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

2 个答案:

答案 0 :(得分:0)

your code is correct but your
require_once('Mother.php');
is not including your mother class. Make sure they are in the same folder or add path to require_once.

答案 1 :(得分:0)

问题是您的require_once声明

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

所以假设 根/ index.php的

Require_once "Child.php"

并假设 根/类/ Child.php

Require_once "Parent.php"

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

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

Require_once __DIR__ . "/Parent.php"

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

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

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

?>

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