今天在写评论列表递归的时候发现一个问题,递归操作将子评论列表保存到父级评论中后,在递归外层的的评论对象中并没出现保存的数据。猜测到是否进入方法后,传入的是对象的一个副本,后面查询相关文档发现确实如此。
PHP中方法的传参和Java有些不同,在Java中除了,方法的传参除了基本类型外,传递进去的都是对象的引用。而在PHP中默认传入的是对象的副本,进入方法后对这个对象的任何操作并不会对方法外的对象产生任何影响。而在上面的情况中我需要递归操作对外层对象造成影响,不然子评论数据无法保存到外层列表中。那么需要在传参时传递对象的引用,需要在发放参数前面加上&,如:

function recursionChildList(&$item) {
    // 代码逻辑 .......
}

包括 foreach 也是这样:

foreach ($list as &$item) {
    // 代码逻辑 .......
}
Last modification:June 8th, 2020 at 06:51 pm
If you think my article is useful to you, please feel free to appreciate