使用闭包强行修改私有属性

2019-06-25 17:45:16   php分享记录

 

最近在研究腾讯IM,在做服务端集成的时候使用了一个网上的类包,但是发现该类包在做离线推送的时候存在bug,无法配置离线推送参数,我研究了类包源码,发现相关参数是私有变量,无法在外部进行修改,但是我发现php的闭包思想可以赋予闭包内的程序性的作用域,那么也就是说,可以把闭包内的作用域调整为与待修改属性的作用域一致,那不就可以修改了吗
  1. 直接上类包源码

    1. private $offlinePushInfo = [];//待修改私有属性,命名空间JkTech\TencentIm\Service
  2. 使用闭包进行修改

    1. $im = Im::message();//实例化出的对象
    2. \Closure::bind(function () use($im,$offlinePushInfo){
    3. $im->offlinePushInfo = $offlinePushInfo;
    4. },null,$im)();