extends可以根绝条件动态更换吗?

class base extends Controller
class base extends Common
比如像上面这个,能不能根据数据库内存的字段内容的改变,从而extends不同呢
请教各位指点

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
fatrbaby
最佳答案

不能。变量需要在执行阶段才能确定他的值。而extends需要在编译阶段(PHP则应是解析抽象语法树阶段)决定继承的父类,以便加载进内存进行解析;所以你要动态更换继承的父类的话,编译器就会很懵逼。有类似可以动态“更换”类的语法,如Java里的泛型,不过使用比较局限。

2年前 评论
讨论数量: 7
chowjiawei

把这2个东西 做成2个stub

file

在需要判断条件的地方,将文件删除后,填充你需要的那个stub 以下例子给你参考,例子是如果文件不存在就不会生成,你弄成覆盖或者删除新增即可 file

2年前 评论

设计模式中,抽象工厂模式应该能解决你的问题

2年前 评论

①如果Controller和Common是非抽象类 写一个属性,根据需要赋值,如: if(1) $this->property = new Controller; if(2) $this->property = new Common; ②如果Controller和Common是抽象类 把公用方法写出trait,两个都use进去,这样没办法做抽象方法的约束,就要自己注意了

2年前 评论

@chowjiawei 好的好的,我去研究研究

2年前 评论

@milksoul 不好意思,我没太懂 :grin:

2年前 评论
fatrbaby

不能。变量需要在执行阶段才能确定他的值。而extends需要在编译阶段(PHP则应是解析抽象语法树阶段)决定继承的父类,以便加载进内存进行解析;所以你要动态更换继承的父类的话,编译器就会很懵逼。有类似可以动态“更换”类的语法,如Java里的泛型,不过使用比较局限。

2年前 评论
陈先生

考虑一下面向接口编程,和trait

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!