gpt4 book ai didi

php构造函数继承

转载 作者:可可西里 更新时间:2023-11-01 12:55:44 28 4
gpt4 key购买 nike

我想澄清一个我遇到的问题

我有一个 DataBase 基类,它将被许多其他类继承。构造函数如下所示:

public function __construct ($table)
{
$this->table = $table;
$this->db = new Database();
$this->db->connect();
}

我将从 child 的这个构造函数中调用如下:

 public function __construct ($something)
{
parent::__construct("planets_games");
}

我的问题是 php 不允许我在没有 $something 参数的情况下创建 child 的构造函数我得到以下信息:

 Fatal error: Declaration of planetsGames::__construct() must be compatible with that of IScaffold::__construct()

我目前通过像这样实例化一个对象来绕过这个:

$pg = new planetsGames('uselessStringHereThatHasNoUtilityAtAll');

我想我在我的基本 php 知识中遗漏了一些非常重要的东西

非常感谢您的提前帮助

最佳答案

此错误消息指的是 liskov substitution principle .它适用于每个 IS-A 关系(这是使用继承(扩展)的含义),并声明每个子类型都应该完全可替换为父类(super class)型。

但这不适用于构造函数!您使用的是哪个 PHP 版本?

看起来基类已经将构造函数标记为抽象的。这是唯一的方法可能会出现此错误。

您永远不应该将构造函数标记为 abstract、final 或将它们放在接口(interface)中!

在大多数语言中,这甚至是不可能的。

What you should take away from this is that the best-practice is that each concrete object has a constructor with a signature that best represents how a consumer should fully instantiate that particular object. In some cases where inheritance is involved, “borrowing” the parents constructor is acceptable and useful. Furthermore, it is encouraged that when you subclass a particular type, that your new type should, when appropriate, have its own constructor that makes the most sense to the new subtype.

http://ralphschindler.com/2012/03/09/php-constructor-best-practices-and-the-prototype-pattern

关于php构造函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459795/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com