php – 强制调用父方法
发布时间:2020-12-13 17:29:21 所属栏目:PHP教程 来源:网络整理
导读:有没有办法(或模式)强制对父方法的调用? 我有一个像这样的抽象类: abstract class APrimitive{ public function validate(){ //Do some stuff that applies all classes that extend APrimitive }} 然后我有类似于APrimitive“基地”的课程: class CSophi
有没有办法(或模式)强制对父方法的调用?
我有一个像这样的抽象类: abstract class APrimitive{ public function validate(){ //Do some stuff that applies all classes that extend APrimitive } } 然后我有类似于APrimitive“基地”的课程: class CSophisticated extends APrimitive{ public function validate(){ //First call the parent version: parent::validate(); //Then do something more sophisticated here. } } 问题是,如果我们在几个月的时间内回到代码,并用一个validate()方法创建了一些类似于CSfulisticated的类,那么我们可能会忘记调用parent :: validate( ). 请注意,某些CS复杂类可能没有validate()方法,因此将调用父版本. 我知道有可能在某处发表评论,提醒程序员调用parent :: validate(),但是有更好的方法吗?如果没有在validate()方法中调用parent :: validate(),那么抛出异常的自动化方法也许是很好的.
您可以使用以下方式强制执行该呼叫:
abstract class APrimitive{ final public function validate(){ //do the logic in validate overrideValidate(); } protected function overrideValidate(){ } } class CSophisticated extends APrimitive{ protected function overrideValidate(){ } } 现在只允许调用验证,这将反过来称为您的覆盖方法.语法可能有点偏离(PHP不是我的选择语言),但原则可以应用于大多数OOP语言. 进一步说明: abstract class APrimitive{ public function validate(){ echo 'APrimitive validate call.'; overrideValidate(); } protected function overrideValidate(){ } } class CSophisticated extends APrimitive{ protected function overrideValidate(){ echo 'CSophisticated call.'; } } CSophisticated foo; foo.overrideValidate(); //error - overrideValidate is protected foo.validate(); // 输出: APrimitive validate call. CSophisticated call. 函数调用基本上做如下: foo.validate() -> APrimitive.validate() -> ASophisticated.overrideValidate() (or APrimitive.overrideValidate() if it wasn't overriden) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |