脚本宝典收集整理的这篇文章主要介绍了在PHP中挂钩方法执行,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
abstract class Base{ public function PRe(){ print "Runing Base::pre()\n"; } public function pos(){ print "Runing Base::post()\n"; } abstract public function doIT(); } class Cheating extends Base { public function doIt(){ $this->pre(); print "Doing it the cheating way\n"; $this->pos(); } }
但我真正喜欢做的是:
class Alpha extends Base { public function doIt($x,$y){ print "Doing it in Alpha with x=$x,y=$y"; } } class Beta extends Base { public function doIt($z){ print "Doing it in Alpha with z=$z"; } }
并且有一些方法可以始终运行pre和pos方法,而无需更改doIt方法本身.
显而易见的方式,应该是在所有Base的派生中是同质的,如下所示:
abstract class Base { public function pre(){ print "Runing Base::pre()\n"; } public function pos(){ print "Runing Base::post()\n"; } public function process($a,$b){ $this->pre(); $this->doIt($a,$b); $this->pos(); } abstract public function doIt(); } class Wishful extends Base { public function doIt($a,$b){ print "Doing it the Wishful way with a=$a,b=$b\n"; } }
问题在于,由于我们在每个doIt实现上都有不同数量和类型的参数,因此实际上并没有解决问题.
这听起来像是“钩子”的情况 – 如何实现这些?或者任何其他解决问题的正当方式……我相信应该有一种更简单的方法,我只是错过了 – 可能在圈子中思考错误的事情.
谢谢!
获取参数有点棘手,但可以使用__call:http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods完成
以上是脚本宝典为你收集整理的在PHP中挂钩方法执行全部内容,希望文章能够帮你解决在PHP中挂钩方法执行所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。