You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:48:24