PHP:如何在函数中通过数组参数调用类属性?
解决PHP动态访问STDClass属性的问题
你的核心问题是动态访问对象属性时的解析优先级问题。PHP中直接写->$input_targets[$i]会被错误解析:它会先尝试取$input_targets变量的索引$i值,再将该值作为属性名,而不是先计算函数参数里$input_targets[$i]的结果。
修复后的函数写法
用花括号包裹属性名表达式,明确告诉PHP先计算$input_targets[$i]的值,再作为属性名访问:
function createarray($input_obj, $input_targets, $i) { return $input_obj->collection[0]->{$input_targets[$i]}; }
注:把参数$input_array改名为$input_obj更准确,因为它实际是STDClass实例而非数组,避免命名混淆。
更高效的批量提取方案
如果想一次性把所有目标属性整理成数组,不用循环调用函数,可以优化成:
function extractProperties($input_obj, $targets) { $item = $input_obj->collection[0]; $result = []; foreach ($targets as $prop) { $result[$prop] = $item->{$prop}; } return $result; } // 使用示例 $targets = ['number','date','amount']; $orderData = extractProperties($orders, $targets); // 直接得到关联数组:['number' => 订单号, 'date' => 订单日期, 'amount' => 订单金额]
内容的提问来源于stack exchange,提问作者Albert van Harten
相关产品推荐
相关产品推荐

