gpt4 book ai didi

php - 接口(interface) : require an abstract constant?

转载 作者:行者123 更新时间:2023-12-04 06:02:44 26 4
gpt4 key购买 nike

我有课ParentClass() , 一些子类ChildClass1() , ChildClass2()等和一个界面iChild() . ChildClass()继承自 ParentClass()并实现 iChild() :

class ChildClass1 
extends ParentClass
implements iChild {}

class ChildClass2
extends ParentClass
implements iChild {}

iChild() -接口(interface),我想要求,需要填充一些常量(主要是标识符和一些功能定义)。我没有发现这样做的任何意义,因为常量只能在接口(interface)中定义,但在实现类中不可重新定义。我发现的唯一解决方法是在 iChild() 中定义一些 getter 函数。 ,这反过来又返回必要的值,但这似乎不是正确的方法。正如我已经从 ParentClass() ,我也不能使用抽象类来例如检查所有 ChildClass 中所需常量的定义。

关于如何解决这个问题的任何想法?

更新:要回答评论 - 我的意思是更精简和更具可读性:
class ChildClass1 {
const MY_NAME = "Foo Bar Name 1";
}

-- vs --

class ChildClass1 {
public function GetMyName() {
return "Foo Bar Name 1";
}
}

我发现第一个例子比第二个更易读和易懂。不幸的是,我目前没有办法强制 MY_NAME 由 ChildClasses 设置。

最佳答案

我不确定这里的正确解决方案是常数。常数的定义是它不会改变。如果 iChild 的每个实现需要定义常量它不是真正的常量,它是一个变量。我建议添加适当的 getter 方法,告知用户他们需要在实现中提供此信息。

好的,我做了一些测试,一个类根本不可能覆盖由它正在实现的接口(interface)或它正在扩展的父类设置的常量。类常量似乎是在编译时检查的,如果您尝试覆盖它,则会引发 fatal error 。对于您正在尝试做的事情,适当的答案是在您的界面中提供 getter 方法。

关于php - 接口(interface) : require an abstract constant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765514/

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