php的对象传值与引用传值代码实例讲解
PHP的对象传递:深究传值与引用传值
在PHP的世界中,理解变量和对象的传递方式是至关重要的。让我们通过一个具体的例子来深入了解这两者之间的差异。
让我们从基础的变量赋值开始。当我们执行 `$b = $a;` 这样的语句时,实际上是对 `$a` 的值进行了一个“拷贝赋值”。这意味着 `$b` 拥有了 `$a` 的一个独立副本,无论之后如何修改 `$a` 的值,都不会影响到 `$b`。
当我们处理对象时,情况就变得复杂了。在PHP中,对象是通过引用传递的。这意味着当你执行 `$p = new Person();` 这样的语句创建一个新的 `Person` 对象并将其赋值给 `$p` 时,实际上你是在创建一个指向该对象的引用,而不是复制对象本身。当你通过 `$p->name = 'jesse';` 修改对象的属性时,你实际上是在修改原始对象。这就是所谓的引用传值。
为了更好地理解这个概念,让我们回到我们的代码示例。在代码中,我们创建了一个 `Person` 类并实例化了一个对象 `$p`。当我们通过 `$p->name = 'jesse';` 修改对象的 `name` 属性时,这个改变是永久性的,因为我们并没有创建该对象的一个副本,而是直接修改了原始对象。这就是引用传值的魅力所在。
总结一下,PHP中的变量赋值是值传递,而对象赋值则是引用传递。这意味着当你修改一个对象的属性时,你实际上是在修改原始对象,而不是它的一个副本。这种特性使得PHP在处理对象和复杂数据结构时非常灵活和强大。希望这个例子能帮助你更好地理解PHP的这两种传值方式。如果你对PHP的对象和传值方式感兴趣,不妨深入一下,你会发现更多有趣的知识等待你去发现。深入PHP中的对象内存关系与传值方式
让我们首先描绘一个关于对象 `$a` 和 `$b` 的内存关系图。在PHP中,当我们创建一个对象并将其赋值给变量时,这个变量实际上是指向对象的内存地址的引用。让我们通过代码来深入理解这一点。
代码片段:
```php
class Person {
public $name;
public $age;
}
// 创建Person类的一个对象,并将其赋值给变量$p
$p = new Person;
// 给对象的$name属性赋值
$p->name = 'jesse';
// 将对象赋值给另一个变量$m,此时$m是对同一对象的另一个引用
$m = $p;
// 通过变量$m修改对象的$name属性值
$m->name = 'Marry';
// 输出两个变量所指向对象的$name属性值,结果均为'Marry'
echo $p->name, $m->name; // 输出:Marry Marry
```
在这段代码中,“最点睛的代码”无疑是 `$m = $p;`。这里的问题是,当我们将对象赋值给另一个变量时,是创建了对象的一个副本(按值传递),还是只是创建了一个指向原始对象的新引用(按引用传递)?答案是后者。在PHP中,对象是通过引用传递的。变量 `$m` 不是对象的另一个副本,而是指向与 `$p` 相同对象的另一个引用。这就是为什么当我们通过 `$m` 修改对象的 `$name` 属性时,`$p` 所指向的对象的 `$name` 属性值也会发生更改。两个对象的属性值都被修改为 'Marry'。这就是引用传递的效果。
内存关系:
理解PHP中的对象传值与引用传值
在PHP中,对象是一种复合数据类型,用于封装属性和方法。当我们处理对象时,会涉及到对象的传值和引用传值。让我们通过一个简单的实例来深入理解这个概念。
我们定义一个名为Person的类,它有两个公共属性:name和age。
```php
class Person {
public $name;
public $age;
}
```
然后,我们创建一个Person类的实例,并将其赋值给一个变量$p。$p就是一个对象,拥有name和age两个属性。
```php
$p = new Person;
```
我们可以通过箭头运算符(->)来访问和修改对象的属性。例如,给$p的name属性赋值为'jesse'。
```php
$p->name = 'jesse';
```
接下来,我们创建另一个变量$m,并使用引用赋值操作符(&)将其与$p关联起来。这意味着$m是对$p的引用,它们指向内存中的同一个对象。
```php
$m = &$p;
```
现在,当我们通过$m修改name属性的值时,$p的相应属性也会发生变化,因为它们引用的是同一个对象。
```php
$m->name = 'Marry';
```
我们输出$p和$m的name属性,结果都会是'Marry',因为我们对$m的修改也影响了$p。
```php
echo $p->name, $m->name; // 输出:Marry Marry
```
通过这个简单的实例,我们了解了PHP中对象的传值和引用传值的区别。当我们对引用传递的对象进行修改时,原始对象也会被修改,因为它们实际上是同一个对象的两个引用。而对象传值则是创建一个新的对象副本,修改新对象不会影响原始对象。在PHP中,对象默认是按引用传递的,但也可以通过传递对象的克隆副本来实现按值传递。这个特性使得PHP在处理对象和复杂数据结构时非常灵活和强大。
编程语言
- php的对象传值与引用传值代码实例讲解
- JS+CSS实现带关闭按钮DIV弹出窗口的方法
- Rust 能够取代 C 语言吗
- asp.net Xml绑定到数据控件的具体实现
- JavaScript基于replace+正则实现ES6的字符串模版功能
- 动态表单验证的操作方法和TP框架里面的ajax表单
- sqlserver 统计sql语句大全收藏
- Typescript 中的 interface 和 type 到底有什么区别详解
- SQL优化经验总结
- vue实现双向绑定和依赖收集遇到的坑
- JS仿百度自动下拉框模糊匹配提示
- 浅析PHP7的多进程及实例源码
- PHP+Ajax实现的无刷新分页功能详解【附demo源码下
- jQuery+HTML5实现弹出创意搜索框层
- easyui下拉框动态级联加载的示例代码
- vue项目开发中setTimeout等定时器的管理问题