如何动态调用PHP对象的Setter方法并设置属性值?
解决动态调用setter方法传值问题
你之前的两种写法都存在问题,正确的动态调用带参数方法的方式如下:
假设你有对应的日期值数据,分两种场景处理:
场景1:字段数组与值数组一一对应
$fields = ['dateFrom', 'dateTo']; $dateValues = ['2023-01-01', '2023-12-31']; foreach ($fields as $index => $key) { $methodName = 'set' . ucfirst($key); // 直接调用方法并传入对应日期值 $gallery->$methodName($dateValues[$index]); }
场景2:字段与值以键值对形式存储
$dateData = [ 'dateFrom' => '2023-01-01', 'dateTo' => '2023-12-31' ]; foreach ($dateData as $key => $value) { $methodName = 'set' . ucfirst($key); $gallery->$methodName($value); }
原写法失效原因
- 第一种写法
$gallery->{$classKey};仅获取了方法的引用,没有传递参数执行调用,相当于只“获取方法”而没“执行方法赋值”。 - 第二种写法把参数拼进字符串,得到的是普通文本字符串,PHP不会自动将字符串解析为方法调用逻辑,因此无法完成赋值操作。
内容的提问来源于stack exchange,提问作者nas
相关产品推荐
相关产品推荐

