【发布时间】:2015-10-12 18:15:39
【问题描述】:
作为一名软件开发人员,我想为我的客户提供一个扩展库。不应更改库提供者的原始库。
有几种方法可以做到这一点。特征进入脑海,但也继承。
假设原库中有一个类定义为:
class Super {}
第一种方法:使用特征扩展原始库:
trait MyTrait {
public function func() {
echo "func in MyTrait\n";
}
}
// Customer writes in his code:
class Sub1 extends Super {
use MyTrait;
}
$sub1 = new Sub1;
$sub1->func();
第二种方法:使用继承扩展原库:
class LibExtension extends Super {
public function func() {
echo "func in LibExtension\n";
}
}
// Customer writes in his code:
class Sub2 extends LibExtension {
}
$sub2 = new Sub2;
$sub2->func();
在这种情况下,使用特征与继承有什么优势? 在哪种情况下哪种方法更受限制?作为软件开发人员或客户,哪一个给我更大的灵活性?
如果我们在开源或闭源领域,这些方法有什么不同吗?
对于这种情况有更好的方法吗?
【问题讨论】:
标签: php inheritance architecture traits