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

PHP中如何通过含层级键的变量调用类属性?

PHP中通过层级字符串访问对象属性的解决方案

问题场景

现有如下PHP代码:

$testvar1 = "paymentTerms->daysOfCredit";
$testvar2 = "orderNumber";
echo $input_obj->collection[0]->paymentTerms->daysOfCredit; // 返回8
echo $input_obj->collection[0]->orderNumber; // 返回159
echo $input_obj->collection[0]->{$testvar1}; // 无返回,预期返回8
echo $input_obj->collection[0]->{$testvar2}; // 返回159

直接使用{$testvar1}无法获取预期值,原因是PHP不会自动解析字符串中的->层级,它会把整个字符串当作单一属性名查找,而目标对象中并不存在名为paymentTerms->daysOfCredit的属性。

可行解决方案:使用explode结合简化代码

可以通过explode()将层级字符串拆分为属性数组,再逐层遍历访问对象属性。以下是两种简洁的实现方式:

方式一:使用array_reduce简化遍历

function getNestedProperty($obj, $path) {
    return array_reduce(explode('->', $path), function($current, $prop) {
        return $current->$prop ?? null;
    }, $obj);
}

// 使用示例
echo getNestedProperty($input_obj->collection[0], $testvar1); // 输出8
echo getNestedProperty($input_obj->collection[0], $testvar2); // 输出159

方式二:箭头函数简写(PHP 7.4+)

如果你的PHP版本支持箭头函数,可进一步简化代码:

$getProp = fn($obj, $path) => array_reduce(explode('->', $path), fn($c, $p) => $c->$p ?? null, $obj);

// 使用示例
echo $getProp($input_obj->collection[0], $testvar1); // 输出8

这两种方法都能有效处理多层级属性路径,同时代码简洁易读。

内容的提问来源于stack exchange,提问作者Albert van Harten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:04