0

我知道根据定义,特征不能扩展类,但是我想知道是否有某种解决方法。

我的情况:

我创建了包revisionable,它的第一个化身是一个你从模型扩展的类,它本身扩展了 Laravel 基本 Eloquent 类,但是随着时间的推移,有很多请求将其更改为特征,因此人们可以use修改,并且能够扩展自己的基类。

目前,我能想到的唯一同时允许可扩展类和特征的方法是将两者作为一个整体文件提供,这意味着我在两个文件中重复整个代码,这很容易导致麻烦.

我想知道是否有人知道一些解决方案,我可以拥有一个是上帝的文件,而另一个文件依赖于它。

规则

  • 现有类不能使用特征,因为 php 5.3 上包的现有用户将无法访问特征。
4

2 回答 2

2

绝对没有办法完成你想要的。


由于 Laravel 本身(在 4.2 中)现在已经放弃了 PHP 5.3,是时候继续前进了。

标记删除该类的新版本,将 PHP 5.4 要求添加到您的composer.josn文件中,并将此信息添加到您的文档中。

任何仍然停留在 5.3 上的人总是可以只使用composer require您以前的版本。

于 2014-05-20T00:32:42.553 回答
0

PHP 5.3 是个问题。回到它流行的时候,编程风格就是将文件包含/要求到另一个文件中。如果您可以将您的功能拆分为可能包含在特征和类中的功能 - 它可能是一个解决方案。但这取决于功能。

现代方式将是解耦和依赖注入,换句话说就是考虑单元和单元测试。

一个特征的问题以及子类的问题是,如果不接触父类的功能,就无法对所做的事情的纯功能进行单元测试。你不能模拟父类,你只能模拟注入的类,对吧?

想想现代。创建一个类,在那里注入 Eloquent 对象。然后在特征中使用这个类和一些用于 laravel 模型的父类。

并原谅泰勒你不能嘲笑雄辩的事实。他也许可以在新版本的 Laravel 中修复它。但是您必须迁移到 PHP7,因为它是最新 laravel 版本的要求。

于 2018-03-15T22:05:18.807 回答