&quot php,php->所谓"hook"

本文介绍了钩子函数的概念及其在代码插件化和更改执行顺序中的应用。通过实例展示了如何在子类继承父类时,使用钩子函数中断不需要的构造函数执行,以降低代码耦合度。文章还提出了一道关于子类如何选择性继承父类构造函数的思考题,并给出了解决方案。
摘要由CSDN通过智能技术生成

hook,中文"钩子",原理是在函数内留下一个空白函数调用,为以后代码的拓展或者更改留下注入空间.

主要的应用场景是代码插件化,更改代码执行顺序.

代码插件化

我们经常会遇到各种需求,并且需求不确定,当你不确定一个功能函数是否要拓展,你可以给这个函数加上一些钩子,便于以后的拓展,使得代码如同一个一个的积木,需要就拿来,不需要随时去除,降低代码的耦合度假装有代码

代码我就不贴了,因为我看了一篇文章觉得他写的比我写的好.

参考文章:http://www.thinkphp.cn/extend/876.html (侵删)

更改代码执行顺序

通过一个函数的返回值来改变代码的流程,有没有很熟悉?,bingo,我们经常使用的配置文件就是非常典型的运用场景.既然大家都很熟悉这种应用,话不多说,出道题,大家来举一反三

如题:

当子类需要继承父类的构造函数时,大多数人都会想到使用parent::__construct(); 但是当子类只需要父类构造函数的一部分时呢?

用户表分为管理员和普通用户,这时文章子类需要继承用户父类的普通用户,而无需继承管理员时,我们在实例化普通用户后中断构造,使其不继续往下走.

已知:子类继承并执行父类构造时,父类构造函数里如果出现与子类函数中相同命名的函数,子类的同名函数将覆盖父类的同名函数.

依题意得:

用户父类class User{    public function __construct(){          //实例化普通用户

$this->normal_user = new normal_user();          //钩子函数

$this->hook();           //实例化管理员用户

$this->admin_user = new admin_user();

}  public function hook(){       //测试变量

$this->test = 1;

}

}

文章子类class Article{    public function __construct(){          //执行父类构造函数

parent::__construct();          //打印测试变量

var_dump($this->test);

}  public function hook(){        //测试变量

$this->test = 2;         //因为子类只需要实例化普通用户类,所以中断父类构造的执行

return false;

}

}

执行结果:$this->test = 2 , 并且只实例化了normal_user类

作者:DullCat

链接:https://www.jianshu.com/p/d461da0fbe40

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值