在不同的 PHP 版本中,引用传递的行为有何不同?
php中变量传递行为在不同版本间存在差异:php 5.3及更早版本:所有变量按引用传递,包括基本类型变量。php 5.4及更高版本:基本类型变量默认按值传递,对象变量仍按引用传递。
PHP 不同版本间引用传递行为差异
在 PHP 中,变量可以按值传递或按引用传递。对于对象变量而言,默认行为是按引用传递,而对于基本类型变量(如整型和字符串)则是按值传递。
PHP 5.3 及更早版本
立即学习“PHP免费学习笔记(深入)”;
在此之前版本中,所有变量(包括基本类型变量)都按引用传递。这意味着,即使你将基本类型变量作为参数传递给函数,函数内的任何修改也会反映在调用函数中的变量上。
示例:
// PHP 5.2$x = 10;function add_10($y) { $y += 10;}add_10($x);echo $x; // 输出: 20
PHP 5.4 及更高版本
从 5.4 版本开始,基本类型变量的默认参数传递行为被改为按值传递。这意味着,函数对这些变量所做的任何修改都不会影响调用函数中的变量。
示例:
// PHP 5.6$x = 10;function add_10($y) { $y += 10;}add_10($x);echo $x; // 输出: 10
实战案例:
考虑以下代码,它使用一个函数来修改一个对象属性:
class Person { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; }}$person = new Person();$person->setAge(25);// 创建一个指向 person 对象的引用$cloned_person = $person;// 使用引用传递修改克隆对象的年龄$cloned_person->setAge(30);// 由于对象的引用被传递,所以 person 对象的年龄也被修改echo $person->getAge(); // 输出: 30
在这个例子中,我们通过引用传递了一个对象,因此对克隆对象所做的修改也影响了原始对象。这是因为 PHP 中的对象总是按引用传递。