文档库 最新最全的文档下载
当前位置:文档库 › 黑马程序员_PHP_课程同步笔记day26:对象的传值方式

黑马程序员_PHP_课程同步笔记day26:对象的传值方式

黑马程序员_PHP_课程同步笔记day26:对象的传值方式
黑马程序员_PHP_课程同步笔记day26:对象的传值方式

【黑马程序员济南】PHP课程同步笔记day26:对象的传值

方式

对象的传值方式

看看对象传值的情形:分为两种值传递和引用传递

值传递:

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

[mw_shl_code=php,true]/*传智播客济南校区*/

class A{

var $p1 = 1;

}

$a1 = new A();

$a2 = $a1;

$a2->p1 = 11;

echo $a1->p1;[/mw_shl_code]

输出结果为:11

引用传递:

所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

[mw_shl_code=php,true]/*传智播客济南校区*/

class B{

var $p1 = 1;

}

$b1 = new B();

$b2 = &$b1;

$b2->p1 = 11;

echo $b1->p1;[/mw_shl_code]

输出结果为:11

在这种情况下:引用传递和值传递得到的结果是一样的!

为什么会这样呐?

一个变量存储了对象信息,其在内存结构中,是如下的方式:

$a1 = new A();

其内存结构形式如下:

即:一个对象变量内部,实际存储的其实是该对象的"编号",由该编号,才指向对象数据本身;

我们在语法上,既无法改变编号,也无法控制编号,而是只能通过对象使用形式(->)来对该编号指向对象进行操作。

语句值传递类似这样:

$a2 = $a1; //值传递

引用传递类似这样:

$b1 = new B();

$b2 = & $b1; //引用传递

证明:

[mw_shl_code=php,true]/*传智播客济南校区*/ class A{

var $p1 = 1;

}

$a1 = new A();

$a2 = &$a1;

class B{

var $p1 = 1;

}

$b1 = new B();

$b2 = &$b1;

$a1 = 100; //随意给其赋一个值

$b1 = 100; //随意给其赋一个值

echo "
";var_dump($a1);

echo "
";var_dump($a2);

echo "
";var_dump($b1);

echo "
";var_dump($b2);[/mw_shl_code]

输出结果:

int(100)

object(A)#1 (1) {["p1"]=>int(11)}

int(100)

int(100)

a1改变,a2不改变,这里就证明他们是值传递

b1改变,b2也跟着改变,这里就证明他们是引用传递其内存图为下图:

相关文档