PHP7中无法访问Closure对象内部属性,如何获取cisBillDetailsObjectBase?
问题:如何从Closure对象中获取
cisBillDetailsObjectBase 单元测试代码如下:
$data = $this->_createSfApiFindMock($cisDataCount); var_dump($data()); die();
输出结果:
class Closure#731 (3) { public $static => array(4) { 'cisDataCount' => int(201) 'cisBillObjectBase' => class stdClass#716 (20) { public $unisrv_dcis__TargetMonth__c => string(6) "202301" ......... public $unisrv_dcis__Member__r => class stdClass#717 (1) { ... } public $unisrv_dcis__Contract__r => class stdClass#718 (3) { ... } } 'cisBillDetailsObjectBase' => array(5) { [0] => class stdClass#720 (11) { ... } [1] => class stdClass#722 (11) { ... } [2] => class stdClass#724 (11) { ... } [3] => class stdClass#726 (11) { ... } [4] => class stdClass#728 (13) { ... } } 'maxDataChunkSize' => int(200) } }
尝试过以下方法均无效:
$cisBillDetailsObjectBase = $data->static['cisBillDetailsObjectBase']; $data->static(); $data->static; $data->{"\0Closure\0static"};
解决方法
Closure类的static属性是内部私有属性,即使var_dump显示为public,也无法直接通过对象访问。可以使用PHP的反射机制来获取该属性:
$reflection = new ReflectionClosure($data); $staticVars = $reflection->getStaticVariables(); $cisBillDetailsObjectBase = $staticVars['cisBillDetailsObjectBase'];
ReflectionClosure是专门用于处理Closure对象的反射类,能访问其内部的静态变量。getStaticVariables()方法会返回Closure中所有静态变量组成的数组,直接从中取出目标字段即可。
内容的提问来源于stack exchange,提问作者whitesiroi
相关产品推荐
相关产品推荐

