针对“通过5个php实例细致说明传值与传引用的区别”的命题,以下是详细攻略:
1. 写作思路
- 确定主题:传值与传引用的区别。
- 列举主题开头的“5个PHP实例”,以便更加具体地说明区别。
- 确定标准的markdown格式文本,注意标题的使用,包括一级、二级、三级标题等,并对代码块进行高亮处理。
- 从实例中具体阐述传值和传引用的不同,包括基本数据类型、数组、对象等。
2. 写作具体步骤
2.1 传值和传引用
PHP中,函数参数的传递有两种方式:传值和传引用,传值是指在调用函数时将实参的值拷贝到形参中,而传引用是指在调用函数时将实参的变量作为形参的变量名称传递给函数使用。两种方式有什么不同呢?
-
传值:将实参的值拷贝到形参中,但在函数内部修改形参的值并不影响实参。
-
传引用:将实参的变量作为形参的变量名称传递给函数使用,函数修改形参的值时,实参的值也会被修改。
2.2 传值与传引用的不同
下面将通过5个实例阐述传值与传引用的不同。
实例1:传递一个基本类型数据
下面是一个实例,展示了传递一个基本类型数据时的情况:
function update($value)
{
$value = $value + 1;
echo "update value: " . $value . "<br>";
}
$num = 10;
echo "before update value: " . $num . "<br>";
update($num);
echo "after update value: " . $num . "<br>";
该例子中,$num的值为10,通过函数update()更新后的值为11。但是在调用update()函数后,再次输出$num的值仍为10,说明在update()函数中传值并没有修改$num的值。
实例2:传递一个数组
接下来我们来看另一个例子,它展示了传递一个数组时的情况:
function update($arr)
{
$arr[0] = $arr[0] + 1;
echo "update array: ";
print_r($arr);
echo "<br>";
}
$arr = array(1, 2, 3);
echo "before update array: ";
print_r($arr);
echo "<br>";
update($arr);
echo "after update arary: ";
print_r($arr);
echo "<br>";
该例子中,$arr的值为array(1, 2, 3),通过函数update()更新后的值为array(2, 2, 3)。但是在调用update()函数后,再次输出$arr的值仍为array(1, 2, 3),说明在update()函数中传值并没有修改$arr的值。
实例3:传递一个对象
下面是一个传递对象时的实例:
class Person {
public $name;
function setName($name) {
$this -> name = $name;
}
function getName() {
return $this -> name;
}
}
function update($obj)
{
$obj -> setName("It was updated!");
echo "update object name: " . $obj -> getName() . "<br>";
}
$obj = new Person();
$obj -> setName("It is original!");
echo "before update object name: " . $obj -> getName() . "<br>";
update($obj);
echo "after update object name: " . $obj -> getName() . "<br>";
该实例中,$obj的值为一个实例化对象,通过函数update()更新后的值为"It was updated!"。在调用update()函数后,再次输出$obj的值将变成"It was updated!"说明在update()函数中传引用修改了$obj的值。
实例4:传递基本类型数据的引用
下面是传递基本类型数据的引用实例:
function update(&$value)
{
$value = $value + 1;
echo "update value: " . $value . "<br>";
}
$num = 10;
echo "before update value: " . $num . "<br>";
update($num);
echo "after update value: " . $num . "<br>";
该实例中,$num的值为10,通过函数update()更新后的值为11。在调用update()函数后,再次输出$num的值变成了11,说明在update()函数中传引用修改了$num的值。
实例5:传递对象的引用
下面是传递对象的引用实例:
class Person {
public $name;
function setName($name) {
$this -> name = $name;
}
function getName() {
return $this -> name;
}
}
function update(&$obj)
{
$obj -> setName("It was updated!");
echo "update object name: " . $obj -> getName() . "<br>";
}
$obj = new Person();
$obj -> setName("It is original!");
echo "before update object name: " . $obj -> getName() . "<br>";
update($obj);
echo "after update object name: " . $obj -> getName() . "<br>";
该实例中,$obj的值为一个实例化对象,通过函数update()更新后的值为"It was updated!"。在调用update()函数后,再次输出$obj的值变成了"It was updated!",说明在update()函数中传引用修改了$obj的值。
3. 总结
通过以上实例,我们可以看到传值和传引用的区别是非常明显的:传值是将实参的值拷贝到形参中,函数修改形参的值并不影响实参,而传引用则是将实参的变量作为形参的变量名称传递给函数使用,函数修改形参的值时,实参的值也会被修改。同时我们也可以看到传引用在某些情况下能够对代码效率和性能产生显著的影响。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过5个php实例细致说明传值与传引用的区别 - Python技术站