🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
引用变量的概念:php中的引用意味着用不同的名字访问同一变量内容。 定义方式用&符号 引用变量工作原理: <?php $a=range(0,1000);创建0到1000的数组1001个 在内存中体现$a指向这个内存空间 $b=$a;此时不会才分配一块空间,重点 :php有个cow机制 copy and write只要不改变就不会开辟空间 $a=range(0,1000);此时值不变,但是进行了写操作,此时才会开辟一块空间 查看这个体现用php一个函数 memory_get_usage(),用var_dump(memory_get_usage()); 查看采用引用方式 $a=range(0,1000); $b=&$a;//此时永远将a和b连在一起 $a=range(0,1000); 此时就不会变了 php变量采用zend引擎,这里面用zval变量容器 $a=range(0,3); xdebug_debug_zval('a'); $b=$a; xdebug_debug_zval('a'); 此时refcount=2指向变量的空间,is_ref=0因为没有引用0 false $a=range(0,3); 此时再用引用 引用还有unset unset只会取消引用,不会销毁空间 $a=1; $b = &$a; unset($b); echo $a."\n"; 还会打印$a的值,只是将b的引用取消掉 对象本身就是引用传值 class Person { public $name ="zhangsan"; } $p1 =new Person; $p2=$p1; $p2->name="ass";//注意此时php改的还是改的p1的值,如果想达到之前那样的操作得执行clone 按理说此时无论改谁都会开辟一块空间,但是不会 总结:对象本身就是引用传递就是& 例题: <?php $data = ['a','b','c']; foreach($data as $key => $val) { $val=&$data[$key]; } 分析 第一次循环 $k=0; $v=a; $v=&$d[0]; 第二次循环 $k=1; $v=b =>d[0]=b; $v=&$d[1];