引用变量 php面试总结1
(1)PHP引用变量
概念:不同的变量名,访问同一个变量内容,使用&
知识点:
使用php函数
(a)memory_get_usage() 查看内存使用情况
eg
// 定义一个变量
$a = range(0, 1000);
var_dump(memory_get_usage());
运行结果

(b)xdebug_debug_zval() zval变量容器
eg
// zval变量容器
$a = range(0, 3);
xdebug_debug_zval('a');
运行结果

refcount指在这个空间的变量有1个 is_ref指是否为引用变量 0为不是引用变量,1为是引用变量
(c) unset 只会取消引用,不会销毁空间
eg
<?php // unset 只会取消引用,不会销毁空间
$a = 1; $b = &$a; unset($b); echo $a. "\n";
运行结果

过程

(d)对象不会进行空间的复制,对象本身就是引用传递(要复制需要clone,相关链接https://blog.csdn.net/sinat_29091823/article/details/72637192)
eg
<?php // 对象本身就是引用传递
class Person
{
public $name = "zhangsan";
} $p1 = new Person;
xdebug_debug_zval('p1'); $p2 = $p1;
xdebug_debug_zval('p1'); $p2->name = "lisi";
xdebug_debug_zval('p1');
运行结果已经过程

使用PHP引用变量前 eg:
<?php // 定义一个变量
$a = range(0, 1000);
var_dump(memory_get_usage()); // 定义变量b,将a变量的值赋值给b
// COW Copy On Write
$b = $a;
var_dump(memory_get_usage()); // 对a进行修改
$a = range(0, 1000);
var_dump(memory_get_usage());
运行结果

过程图

使用PHP引用变量后 eg:
<?php // 定义一个变量
$a = range(0, 1000);
var_dump(memory_get_usage()); // 定义变量b,将a变量的值赋值给b
$b = &$a;
var_dump(memory_get_usage()); // 对a进行修改
$a = range(0, 1000);
var_dump(memory_get_usage());
运行结果

过程图

面试题
<?php /**
* 写出如下程序的输出结果
* <?php
*
* $data = ['a', 'b', 'c'];
*
* foreach($data as $key => $val)
* {
* $val = &$data[$key];
* }
* 程序运行时,每一次循环结束后变量$data的值是什么?请解释
* 程序执行完成后,变量$data的值是什么?请解释
*/ $data = ['a', 'b', 'c']; foreach ($data as $key=>$val)
{
$val = &$data[$key];
var_dump($data);
} var_dump($data);

引用变量 php面试总结1的更多相关文章
- PHP面试 PHP基础知识 一(引用变量)
PHP引用变量 常见引用变量面试题: 什么是引用变量? 在PHP中用什么符号定义引用变量? 考点:PHP的引用变量的概念及定义方式 概念:在PHP中引用意味着用不用的名字访问同一个变量内容 定 ...
- Java基础-被final修饰的引用变量的指向
final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容可变吗?看下面这个例子: public class Test { public static void ...
- PHP GC垃圾回收机制之引用变量回收周期疑问
普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...
- C++引用变量(转)
引用变量 c++中引用变量的使用: 定义: int rate=80; int & pt=rate 1.pt 是引用变量,申明引用变量时必须将其初始化.pt 和rate 的值指向相同的内存变量 ...
- c#问答篇:对象与引用变量-----初学者的困惑
转自:http://www.cnblogs.com/huangyu/archive/2004/08/02/29622.html 从宏观的角度来看,对象是类的实例.比如: //定义一个名为Someone ...
- C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化
一.内联函数 常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...
- C++引用变量学习
版权所有,转载请注明来源 (1)reference variable(rv) 主要用处是作为方程的形式参数,使用rv 可以直接对原数据进行操作而不是该数据的拷贝,节省了时间和空间,尤其是对于结构体以及 ...
- C++学习笔记29,引用变量(1)
引用变量在创建的时候就必须初始化.无法创建一个未被初始化的引用. #include <iostream> using namespace std; int main() { int x=1 ...
- [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异
MyBatis mapper文件引用变量#{}与${}差异 默认,使用#{}语法,MyBatis会产生PreparedStatement中.而且安全的设置PreparedStatement參数,这个过 ...
随机推荐
- T-SQL基础(二)之关联查询
在上篇博文中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式. 表运算符 表运算符的作用是把为其提供的表作为输入,经过逻辑查询处理,返回一个表结果.SQL Server支持四个表运算符: ...
- jQuery中页面返回顶部的方法总结
当页面过长时,通常会在页面下方有一个返回顶部的button,总结一下,大概三种实现方法,下面说下各方法及优缺点. 方法一 锚点定位 ? 1 <a href="#" class ...
- javascript中startswith和endsWidth 与 es6中的 startswith 和 endsWidth
在javascript中使用String.startswith和String.endsWidth 一.String.startswith 和 String.endsWidth 功能介绍 String. ...
- angular $watch 一个变量的变化
$scope.$watch('custArea', function(newValue, oldValue) { angular.forEach(newValue, function(item, ke ...
- listview 异步加载图片并防止错位
1.图片错位原理: 如果我们只是简单显示list中数据,而没用convertview的复用机制和异步操作,就不会产生图片错位:重用convertview但没用异步,也不会有错位现象.但我们的项目中li ...
- (办公)重新选择一个开发工具Eclipse
文章Eclipse内容摘抄自w3cschool的eclipse,原文地址:https://www.w3cschool.cn/eclipse/eclipse-run-configuration.html ...
- HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
Big Number 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212 ——每天在线,欢迎留言谈论. 题目大意: 给你两个数 n1,n2.其中n1 ...
- Debian, Ubuntu linux安装openjdk
sudo apt-get install openjdk-8-jre 这只是单单安装了jre而已,不要安装这个 安装下面这个就行了 sudo apt-get install openjdk-8-jdk ...
- 决策树ID3算法的java实现(基本适用所有的ID3)
已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...
- C#判断文件编码——常用字法
使用中文写文章,当篇幅超过一定程度,必然会使用到诸如:“的”.“你”.“我”这样的常用字.本类思想便是提取中文最常用的一百个字,使用中文世界常用编码(主要有GBK.GB2312.GB18030.UTF ...