覆盖php中的祖父母方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了覆盖php中的祖父母方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在为一个应用程序编写一组框架类,从一个名为StoreLOGic的基类开始,该基类包含税收规则,折扣规则等.类Cart,Order,Quote等将扩展StoreLogic,因为它们都将使用StoreLogic提供的同一组方法.

一旦完成这些核心类,我将通过扩展Cart,Quote和StoreLogic来实现它们,因为这些类的每个应用程序将根据我们的各种客户需求而不同.从父类重写方法很容易,但是在孩子们扩展它们之前覆盖祖父母的课程似乎……不可能?我觉得我这样做是错误的(t​​m)…而且我认为像你这样经验丰富的人可能会指出我正确的方向.看看代码,看看你的想法!

@H_301_13@/* 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..

解决方法

我想你在这里缺少一个非常基本的逻辑

@H_301_13@- MyCart extends Cart - Cart extends StoreLogic

如果要使用MyStoreLogic,则应将购物车定义为

@H_301_13@abstract class Cart extends MyStoreLogic

如果你不想这样做那么你可以拥有

@H_301_13@$cart = new MyCart(); $cart->doDiscounts(new MyStoreLogic()); // output 15

修改

@H_301_13@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; } }

脚本宝典总结

以上是脚本宝典为你收集整理的覆盖php中的祖父母方法全部内容,希望文章能够帮你解决覆盖php中的祖父母方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。