在PHP/Laravel中如何同时克隆对象并移除指定属性?
在PHP/Laravel中如何同时克隆对象并移除指定属性?
嘿,刚好Laravel里自带的tap函数就能完美解决这个需求,不用自己写额外的helper方法!
方法一:通用场景(适用于所有对象)
tap函数的核心逻辑是接收一个值,执行闭包里的操作后再返回这个值,刚好适配咱们先克隆再调整属性的场景,一行代码就能搞定:
$newItem = tap(clone $item, function ($clone) { unset($clone->property1, $clone->property2); });
如果你的PHP版本是7.4及以上,还能用上箭头函数让代码更简洁:
$newItem = tap(clone $item, fn($clone) => unset($clone->property1, $clone->property2));
方法二:针对Eloquent模型的特殊优化
如果你的$item是Laravel的Eloquent模型,还可以用makeHidden方法——不过要注意,这个方法是把属性加入模型的「隐藏属性列表」,并非真正的unset,但在序列化(比如转JSON)或者输出时,这些属性会被自动隐藏,很多业务场景下也能满足需求:
$newItem = tap(clone $item)->makeHidden(['property1', 'property2']);
要是你需要彻底从对象中移除属性(而非仅隐藏),那第一种tap配合unset的方法会更贴合你的需求哦。
备注:内容来源于stack exchange,提问作者Hao Xi
相关产品推荐
相关产品推荐

