PHP变量、内存、代码与内存分区

  • Post author:
  • Post category:php


预定义变量:系统定义的变量,都是数组,比如:

$-GET:获取所有表单以get方式提交的数据

$_POST:保存post方法提交的数据

$_REQUEST:get和post提交的都会保存

$_GLOBALS:PHP所有的全局变量

$_COOKIE:ciikie会话数据

  • 可变变量:如果一个变量保存的值刚好是另一个变量的名字,那么可以直接访问这个变量得到另一个变量的值,再变量前面朵加一个“$”

    $a="b";
    $b="bb";
    echo $$a

  • 变量传值:姜一个变量赋值给另一个变量

    • 值传递:姜变量保存的值复制一份,讲新的值赋给另一个变量,两个变量没有关系

    • 引用传递:将变量保存的值所在的内存地址,传递给另一个变量,两个变量指向同一内存空间,两个变量是同一个值 【语法:$新变量=&$老变量】【用这种方法,新变量的值呗改变,老变量也会改变,毕竟是一点个地方存储的嘛】

  • 内存分区

    • 栈区:系统进行操作,程序运行的地方,不存储数据,小但是快

    • 代码段:存储程序的部分(不执行)

    • 数据段:存储普通数据(全局区和静态区)

    • 堆区:存储复杂数据,大但是效率低

  • 内存和代码

    /*以这段代码为例*/
    <?php
        $a=1;
        $b=$a;(值传递)
        $b=2;
        echo $a$b;
            

    • 代码装载:从脚本文件中将代码取出来,进行编译,将编译的结果放在代码段

    • 代码执行:从代码段中一行一行的执行代码

      • 执行$a=1:再栈区开辟一块内存存储$a,在数据段中开辟一块内存保留值1;然后将1所在的位置赋给a变量

      • 执行$b=$a :栈区开辟存储$b;发现是赋值运算,(而引用传递是直接取出存储a变量的值的地址赋给b变量,并不在数据段开辟新的空间进行存储)会取出$a的值,重新在数据段存储;将新值的内存地址赋值给b变量

      • 执行$b=2

      • 脚本执行结束:系统会回牧所有的内存(栈区,代码段)



版权声明:本文为qq_61778128原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。