php两种封装类的优缺点? -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

php两种封装类的优缺点?

2016-03-09 11:50:07 2240 1

php很多内置的类或扩展类比较粗糙,需要人为的封装一遍,于是有了两种封装方式,
1直接继承
2内部实例化

如redis类,
可以

namespace lib
class redis extends \Redis {}

也可以

namespace lib
class redis {
    private $_redis = null;
    public function __construct() {
        $this->_redis = new \Redis()
    }
}

第一种方法的优点是方便,无须把所有的方法重写一遍,但是不太好统一捕捉异常,
第二种就是麻烦些,需要重写一遍所有的方法,(虽然可以用魔术方法),捕捉异常方便些。
大家用的哪种?为什么呢?

取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 18:55:45

    继承

    继承的特点有
    •✔实现成本低
    •✔调用者可以沿用原有的接口使用,学习成本低
    •✔原有的功能无需任何代码如常工作

    •✘无法隐藏或改变原有的功能
    ◦其实你可以这么做,就好像你确实可以用铁丝去捅插座眼一样
    ◦改变输入、改变输出、改变行为都属于改变功能,比如原来抛的异常现在不抛了,原来return false现在变异常了,原来输入的是青椒现在变牛肉了等等

    •✘正交性弱,没有做到屏蔽父类的依赖,需要更换父类的时候显得脆弱

    常见的合适的应用有
    •增加日志记录等不影响原有逻辑的“旁路逻辑”

    •增加一些方法,比如原有的某一些方法a()b()c()总是连续一起调用,增加一个doABC()方法
    ◦仅限简单的少量的方法,如果要加复杂的功能或者大量的方法,还是建议用组合

    •增加一些静态/工厂方法,比如new Redis(ip, port) => OurRedis::getInstance()

    一句话说就是原有行为不变,is-a的场景用继承。

    组合

    组合的特点有
    •✘实现成本略高,创建对象的过程可能会变复杂
    •✘调用者需要理解新的接口
    •✘需要转发才能让原有的功能工作
    •✔很容易隐藏/屏蔽原有的部分功能
    •✔正交性强,可以通过更换内部的对象适配不同的情况而保持外部接口不变

    常见的合适的应用有
    •一切涉及改变行为的需求
    •未来依赖会变的场景,比如redis会变成memcache,或者mysql会变mariadb之类
    •需要屏蔽细节的场景,比如Session Cache等需求确实用到redis,但对外肯定要屏蔽“这是个redis实现的session”。否则恐龙会出现在你背后把你脑袋咬掉

    一句话就是某个功能依赖另一个功能,use-a或has-a的场景用组合

    偏题,predis用起来还不错,可以一试

    0 0
相关问答

1

回答

如何引用php类外的配置参数 :报错

2020-06-06 18:55:38 383浏览量 回答数 1

1

回答

如何引用php类外的配置参数 403.10 禁止访问:配置无效 

2020-05-27 14:01:32 286浏览量 回答数 1

1

回答

php执行mysql的存储过程后获取返回值问题

2016-02-01 17:30:30 2821浏览量 回答数 1

2

回答

PHP+Mysql 开发的网站安全问题?

2016-02-01 15:22:24 1962浏览量 回答数 2

0

回答

PHP MySQL Where 子句

2015-07-20 10:25:36 8424浏览量 回答数 0

0

回答

PHP MySQL Select

2015-07-20 10:21:10 8968浏览量 回答数 0

0

回答

PHP MySQL Insert Into

2015-07-20 10:16:48 8922浏览量 回答数 0

0

回答

PHP MySQL 创建数据库和表

2015-07-19 15:59:04 10188浏览量 回答数 0

4

回答

如何查看服务器PHP,mysql配置是否支持事务处理

2015-04-28 13:04:24 7268浏览量 回答数 4

2

回答

支持语言及数据库类型:PHP、MySQL/mysqlaccess

2015-04-20 11:50:14 6956浏览量 回答数 2
+关注
2
文章
9426
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载