php 判断继承,特性继承检查PHP

因此,我终于开始使用特征了,它们非常方便,我一直遇到的问题是我想拥有一些特征以向数据对象添加功能.

它本身很简单,除了使用我在基本数据对象中定义的方法来这样做

abstract class Base_Object {

protected function _addToUpdate($field, $value) {

...

}

...

}

trait Extended_Object {

public function doSomeStuff() {

...

$this->_addToUpdate($someVar, $someOtherVar);

}

...

}

class User extends Base_Object {

use Extended_Object;

...

}

然后我的问题是,如果团队中的其他人决定在不扩展Base_Object的对象上使用Extended_Object特性.我曾考虑过在_addToUpdate方法中进行检查,但理想情况下,我希望在创建实例时显示错误.

我想出了一个可行的解决方案,但使我感到有点脏,而且远非理想

abstract class Base_Object {

protected function _addToUpdate($field, $value) {

...

}

...

}

trait Extended_Object {

abstract protected function _addToUpdate($field, $value);

public function doSomeStuff() {

...

$this->_addToUpdate($someVar, $someOtherVar);

}

...

}

class User extends Base_Object {

use Extended_Object;

...

}

通过将一个抽象方法添加到Extended_Object中,我至少可以确定如果不存在我在Base_Object中需要的方法,则会显示一个错误,但是我不能保证所讨论的方法实际上会执行我想要的操作.

理想情况下,当我使用Extended_Object特性实例化对象时,我希望能够运行如下代码所示的内容

if (!($this instanceof Base_Object)) {

throw new Inheritance_Exception("Base_Object");

}

我希望有人找到了一种方法,或者至少比我的方法更好.

注意:我知道我可以使用构造函数来做到这一点,但是只有当我稍后决定创建其他对象扩展特征时,使用单个特征才能使它变得非常混乱

编辑:我确实意识到特质确实是为我想做的事情而设计的,但是它们至少部分地使我能够解决单一继承的问题,而且我知道我不是唯一计划以这种方式使用它们的开发人员

解决方法:

好吧(恕我直言)问题在于您使用特征的方式在技术上是anti-pattern.

首先,特征是什么,为什么要使用它们:

引用comments in php.net之一

The best way to understand what traits are and how to use them is to

look at them for what they essentially are: language assisted copy

and paste.

If you can copy and paste the code from one class to another (and

we’ve all done this, even though we try not to because its code

duplication) then you have a candidate for a trait.

现在,即使有了这些特征,您也可以使用正在使用它们的类的成员,但这并不意味着您应该这样做.回到SRP,这是真正的违规.

PHP使您能够回显$_POST [‘XSS data’],但这并不意味着您应该这样做.因此,无论您要严格使用特质的方式如何,实际上是在引入问题并试图解决该问题.

因此,要回答您的问题,只需重新设计代码,以免您不使用类方法和成员,前提是假定将使用trait的每个类都应具有这些方法和成员.

标签:traits,inheritance,php

来源: https://codeday.me/bug/20191029/1960348.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值