今天在写评论列表递归的时候发现一个问题,递归操作将子评论列表保存到父级评论中后,在递归外层的的评论对象中并没出现保存的数据。猜测到是否进入方法后,传入的是对象的一个副本,后面查询相关文档发现确实如此。
PHP中方法的传参和Java有些不同,在Java中除了,方法的传参除了基本类型外,传递进去的都是对象的引用。而在PHP中默认传入的是对象的副本,进入方法后对这个对象的任何操作并不会对方法外的对象产生任何影响。而在上面的情况中我需要递归操作对外层对象造成影响,不然子评论数据无法保存到外层列表中。那么需要在传参时传递对象的引用,需要在发放参数前面加上&
,如:
function recursionChildList(&$item) {
// 代码逻辑 .......
}
包括 foreach 也是这样:
foreach ($list as &$item) {
// 代码逻辑 .......
}
2 条评论
用java撸个轮子不香吗?
用Java撸还真就没PHP香呢,PHP的环境成本是非常低的,随便一个虚拟主机就能跑,而Java需要JVM也就是服务器来跑。 ::paopao:tieba_emotion_03::
我之前的Hexo博客就是放在虚拟主机上的,因为Hexo是全静态,完全没发挥虚拟主机PHP环境的作用,所以想用PHP撸一个物尽其用。 ::paopao:tieba_emotion_05::