一、php底层内存分区
php将内存分为5个区。堆区一般存对象,栈区一般存基本数据类型(普通变量……)和函数,全局区存全局变量和静态变量,常量区存常量,代码区存代码。
二、函数调用时栈区变化
这是一个简单的递归函数示例。当主函数调用counts函数时,开辟一个新栈,执行counts函数代码。当最后$n等于0时执行return语句返回,且销毁栈。以此类推,函数最后返回到主函数继续往下执行代码,并输出$sum。此时开辟的新栈均被销毁。
因为函数调用时会开辟新栈,且默认值传递,所以形参无法改变实参。若在上图中echo $sum代码后加上echo $n代码则输出n值为3。因echo输出的是原栈区的$n,而不是新栈区的$n。
三、引用实质是传递地址
四、对象在内存中存在形式
输出为:
小明
小明