据我所知,根据定义,特质不能扩展一个类,但是我想知道是否有某种解决方法。
我创建了包revisionable,它在它的第一个版本中是一个类,你从你的模型扩展,它本身扩展了Laravels基础Eloquent类,但是随着时间的推移,有很多要求将它变成一个特征,所以人们可以use
修改,并且能够扩展自己的基类。
目前,我能想到的唯一允许扩展类和特性的是提供两个整体文件,这意味着我在两个文件中重复整个代码,这很容易导致麻烦在路上。
我想知道是否有人知道某些解决方案我可以拥有一个上帝文件,而另一个文件依赖它。
答案 0 :(得分:2)
绝对没有办法达到你想要的效果。
由于Laravel本身(4.2版)已经放弃了PHP 5.3,现在也是时候了。
标记一个删除该类的新版本,向您的composer.josn
文件添加PHP 5.4要求,并将此信息添加到您的文档中。
任何仍然坚持使用5.3的人总是只能composer require
以前的版本。
答案 1 :(得分:0)
PHP 5.3是个问题。 回到流行时,编程风格就是将include / require文件放到另一个文件中。如果您可以将功能拆分为可能包含在特征和类中的函数 - 它可能是一个解决方案。但这取决于功能。
现代方式是解耦和依赖注入,换句话说就是思考单位和单元测试。
特性的问题以及子类的问题在于,如果不触及父类功能,就不能对所做的事情进行单元测试。你不能模拟父类,你只能模拟注入类,对吗?
思考现代。创建一个类,在那里注入Eloquent对象。然后在traits中使用这个类,在laravel模型中使用一些父类。
请原谅泰勒,因为你无法嘲笑雄辩。他可能能够在新版本的Laravel中修复它。但是你必须转向PHP7,因为这是最新的laravel版本的要求。