在 php 中,对象、数组和资源变量作为引用传递时不会复制。这意味着函数内对这些变量的更改会反映到原始变量上。例如,当对象作为引用传递时,函数内对对象属性的更改会反映到原始对象;当数组作为引用传递时,函数内对数组元素的更改会反映到原始数组;当资源作为引用传递时,函数内对资源的操作会反映到原始资源。
PHP 中哪些变量类型作为引用传递时不会复制?
在 PHP 中,函数参数可以作为值传递或引用传递。当作为引用传递时,函数内的任何更改都会反映到原始变量。
但是,某些变量类型在作为引用传递时不会复制,包括:
立即学习“PHP免费学习笔记(深入)”;
- 对象:对象始终作为引用传递,这意味着函数中对对象任何属性或方法的更改都会反映到原始对象。
- 数组:数组作为引用传递,这意味着函数中对数组任何元素的更改都会反映到原始数组。
- 资源:资源(例如,文件句柄)作为引用传递,这意味着函数中对资源任何操作都会反映到原始资源。
实战案例
以下示例演示了当作为引用传递时,对象、数组和资源变量的行为:
class MyClass {
public $name;
}
$object = new MyClass();
$object->name = "Original";
$array = ["one", "two", "three"];
$resource = fopen("test.txt", "w");
function change($object, &$array, &$resource) {
$object->name = "Changed";
$array[0] = "Four";
fwrite($resource, "Hellon");
}
change($object, $array, $resource);
echo $object->name; // Changed
echo $array[0]; // Four
echo fread($resource, filesize("test.txt")); // Hello
在函数 change 中,$object、$array 和 $resource 作为引用传递。这意味着对这些变量的任何更改都会反映到它们在函数外部的值。因此,$object->name、$array[0] 和 $resource 的值都发生了更改。