覆盖php中的祖父母方法
发布时间:2020-12-13 16:48:57 所属栏目:PHP教程 来源:网络整理
导读:我目前正在为一个应用程序编写一组框架类,从一个名为StoreLogic的基类开始,该基类包含税收规则,折扣规则等.类Cart,Order,Quote等将扩展StoreLogic,因为它们都将使用StoreLogic提供的同一组方法. 一旦完成这些核心类,我将通过扩展Cart,Quote和StoreLogic来实
我目前正在为一个应用程序编写一组框架类,从一个名为StoreLogic的基类开始,该基类包含税收规则,折扣规则等.类Cart,Order,Quote等将扩展StoreLogic,因为它们都将使用StoreLogic提供的同一组方法.
一旦完成这些核心类,我将通过扩展Cart,Quote和StoreLogic来实现它们,因为这些类的每个应用程序将根据我们的各种客户需求而不同.从父类重写方法很容易,但是在孩子们扩展它们之前覆盖祖父母的课程似乎……不可能?我觉得我这样做是错误的(t??m)…而且我认为像你这样经验丰富的人可能会指出我正确的方向.看看代码,看看你的想法! /* My core classes are something like this: */ abstract class StoreLogic { public function applyDiscount($total) { return $total - 10; } } abstract class Cart extends StoreLogic { public function addItem($item_name) { echo 'added' . $item_name; } } abstract class Order extends StoreLogic { // .... } /* Later on when I want to use those core classes I need to be able to override * methods from the grandparent class so the grandchild can use the new overriden * methods: */ class MyStoreLogic extends StoreLogic { public function applyDiscount($total) { return $total - 5; } } class MyOrder extends Order { // ... } class MyCart extends Cart { public $total = 20; public function doDiscounts() { $this->total = $this->applyDiscount($this->total); echo $this->total; } } $cart = new MyCart(); $cart->doDiscounts(); // Uses StoreLogic,not MyStoreLogic.. 解决方法
我想你在这里缺少一个非常基本的逻辑
- MyCart extends Cart - Cart extends StoreLogic 如果要使用MyStoreLogic,则应将购物车定义为 abstract class Cart extends MyStoreLogic 如果你不想这样做那么你可以拥有 $cart = new MyCart(); $cart->doDiscounts(new MyStoreLogic()); // output 15 类修改 class MyCart extends Cart { public $total = 20; public function doDiscounts($logic = null) { $this->total = $logic ? $logic->applyDiscount($this->total) : $this->applyDiscount($this->total); echo $this->total; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |