php - 继承:找不到父级
问题描述
我已经在这个问题上打破了几个小时,我似乎无法弄清楚为什么这不起作用。我有两个 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 类存在但有一次它不是引发致命错误(即使当我使用子类时母班在场)
编辑:现在我刚刚删除了扩展并将继承的函数放在子类中,这样我就可以继续工作了。当我找到它时,我会发布解决方案。
解决方案
问题是你的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 在类文件夹中查找任何未知类并将它们加载到系统中
推荐阅读
- javascript - v-for 和 v-if 导致未定义变量的问题
- woocommerce - 如何在不影响相关产品的情况下为单个产品添加自定义价格?
- google-apps-script - 为什么 Google Apps 脚本会给我这个 UrlFetchApp 脚本代码 429?
- python - 转换应该是数据框列中浮点数列表的字符串?
- tensorflow - CNN 模型仅预测第一类
- database-design - 数据库设计同一个实体两次
- javascript - 在 Firebase 中保存喜欢的帖子
- arrays - 在 Python 中为索引数组赋值
- python - 如何将属性从 python 公开到 QMLin 树视图
- javascript - 上传文件后为每个 e.target.files 设置文件名