作为一个PHP的新手,一直对PHP的引用困惑了很久,今晚仔细看了用户手册和做了一些实验,终于明白了其中的原理和细节,特别是=操作符对于不同类型的不同行为。
首先解释赋值操作符=的行为,看下面的例子:
PHP 代码
- $i = 0;
- $j = $i;
- $j = 0;
- echo $j;
- $arr = array(0);
- $arr2 = $arr;
- $arr2[0] = 1;
- echo $arr[0]; //打印输出0
-
- class B
- {
- public $i = 0;
- }
-
- $b = new B();
- $c = $b;
- $c->i = 1;
- echo($b->i);
从这个例子可以看出,如果=操作符右边的变量为基本数据类型或者数组,那么=操作符把右边变量的一份拷贝赋值给左边变量;如果右边变量不是基本数据类型或者数组,如class,那么=会把一个指向右边变量的引用赋值给左边变量。注意:是指向右边变量的引用,而不是指向右边变量所指的内容区域的引用;具体看下边的例子
PHP 代码
- $a = new A();
- $b_a = $a;
- $b_r = &$a;
-
- $b_a = null;
- var_dump($a);
- $b_r = null;
- var_dump($a);
上面的例子也说明了,如果用 $var = &$a 的方式赋值的话,用$var=null来销毁变量$var的话事实上是把$var所指内容被设置null了,其实这句话也暗示了任何一个指向该内容区域的引用变量均可用来销毁该内容区域的内容。所以,要销毁变量$var的话用 unset($var) 。PS:事实上一这种方式赋值$var只是个引用,占用不了多少内存,要不要销毁没所谓,这里这是说下必须用unset的方式销毁。
下面则是《用户手册》中的“引用的解释”的例子:
PHP 代码
下边有这么一句解释:
这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。
引用是什么?
- 在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身――变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的紧密连接。
关于“引用是什么”的一点解释:
PHP 代码
- int i = 0;
- int j = 0;
- int *p = &i;
- p = &j;
上面的代码中,p是一个指向i的内存地址的指针,而*p才是其中的内容;p=&j指向改变了p指针的指向,用*p=111的表达式才会改变i的内容。而PHP中则不是,下面的例子
PHP 代码
$p = 111则马上会改变$i的值。
分享到:
相关推荐
以下是从提供的文件内容中梳理出的PHP学习笔记知识点: 1. PHP常用输出语句: - echo:用于输出字符串,可以输出多个值,但不具备返回值。 - print_r:打印变量的详细信息,也可以输出多个值,并能接受第二个参数...
- `=>`:数组元素赋值操作符,用于关联数组元素的键值对。 - `?:`:三元运算符,用于简化条件判断后的赋值操作。 ### 常用变量处理函数 - `gettype()`:获取变量的类型。 - `is_int()`, `is_bool()`, `is_float()`...
在PHP学习过程中,掌握基本语法是至关重要的。PHP是一种服务器端脚本语言,广泛用于Web开发,能够嵌入到HTML中。以下是对标题和描述中提及的一些关键知识点的详细解释: 1. **PHP语句分隔符**:PHP语句通常以分号...
总的来说,这篇PHP精华笔记提供了学习PHP编程的基础知识框架,包括运算符的使用、流程控制的掌握、函数的定义与调用、作用域的理解以及数据类型转换的操作。对于初学者来说,这是一份很好的参考资料,有助于理解和...
根据给定的文件信息,以下是对“PHP学习资料笔记2”中的关键知识点的详细解析: ### 1. 输出语句:echo 和 print 在PHP中,`echo` 和 `print` 是用来输出字符串到标准输出设备(如浏览器或命令行界面)的两个...
这篇PHP基础学习笔记详细介绍了PHP语言的一些核心概念和语法特性,是初学者入门的良好参考资料。以下是对笔记内容的深入解析: 1. PHP片段的四种表示形式: - 标准tags:`<?php ... ?>`,这是最常见的PHP代码块...
SMARTY支持各种数据类型,包括标量(字符串、整型、浮点型、布尔型)、复合类型(数组、对象)、特殊类型(NULL)。对于数组,SMARTY支持索引数组和关联数组,可以通过下标或键名访问元素。 SMARTY还允许向模板分配...
### PHP基础语法知识笔记 #### 第一节:变量与编码设置 **1. 设置UTF-8编码** 在开发PHP程序时,为了确保浏览器能够正确地解析文件中的文本内容,通常会在页面顶部设置HTTP头来指定编码方式。例如,设置为UTF-8...
它们是弱类型,即变量的数据类型在赋值时自动确定。 ### 四、数据类型 PHP支持以下数据类型: 1. **字符串**:用来存储文本,可以使用双引号或单引号创建。 2. **整型**:用于存储整数值,有三种格式:正常整数、...
本篇学习笔记涵盖了 JavaScript 的基础概念、数据类型、变量处理、基本语法以及一些常用函数和操作方法。这些知识点对于初学者来说是非常重要的基石,掌握它们将有助于进一步深入学习 JavaScript 和 Web 开发。
通过`typeof`操作符,可以获取变量的数据类型,例如`typeof v1`将返回`"string"`或`"number"`,取决于变量`v1`当前的值。 JavaScript的变量命名遵循一定的规则:可以使用大小写字母、数字和美元符号 `$`,但不能以...
这篇学习笔记主要探讨了PHP中的变量,包括它们的定义、命名规则、数据类型、常用函数以及变量声明的方法。 首先,PHP是弱类型语言,这意味着变量的类型不是预先声明的,而是根据所存储的值自动确定。在强类型语言中...
2. 数据类型:包括字符串、整型、浮点型、布尔型、数组、对象、NULL和资源。 3. 控制结构:包括条件语句(if...else、switch)、循环语句(for、while、do...while、foreach)和跳转语句(break、continue)。 4. ...
这些函数在进行类型检查时非常有用,尤其是在需要根据不同的数据类型执行不同操作的场景中。 随着PHP5的引入,类的类型提示(type hint)成为了一个新的特性。类型提示用于约束方法参数的类型,确保传入的方法参数...
为了检测变量的数据类型,可以使用`typeof`操作符。例如: ```javascript var num = 123; var str = "JavaScript"; console.log(typeof num); // 输出 "number" console.log(typeof str); // 输出 "string" ``` 在...