两个PHP代码片段

最近有同事碰到两个问题:

这段代码输出什么?

这段呢?

第一个代码输出true,原因在于in_array使用了==的逻辑(如果第三个参数为true则为===的逻辑),不知道这样是否合理。源码中php将字符串转成了数字,转不了则返回0。(以上测试版本为5.5.30和7.0.0)

第二个代码输出:

因为第一次使用了引用,引用计数不释放,引用的地址是数组中c的地址。第二次循环对$m赋值的时候,不停的修改了$m指向的地址,数组中的地址也就发生了变化。赋值的源码位在于zend_execute.c/zend_assign_to_variable方法中。