PHP clone关键字的用法(附带实例)
在 PHP 中,当一个变量的值为对象时,如果将这个变量赋值给另一个变量,则此过程并不会创建对象的副本,而是使两个变量引用同一个对象。
如果想要获取多个相同的对象,并且某一个对象的成员发生改变时不影响其他对象的成员,可以通过对象的克隆来实现。
对象的克隆使用 clone 关键字,具体语法格式如下:
为了对比对象变量赋值和对象克隆的区别,下面分别进行代码演示:
1) 对象变量赋值的示例代码如下:
由此可见,当对对象变量赋值时,两个变量引用同一个对象。
2) 对象克隆的示例代码如下:
由此可见,当对对象克隆时,两个变量引用不同的对象。
在克隆对象时,如果想要对新对象的某些属性进行初始化操作,可以通过 __clone() 魔术方法来实现。例如在 Person 类中使用 __clone() 魔术方法,示例代码如下:
如果想要获取多个相同的对象,并且某一个对象的成员发生改变时不影响其他对象的成员,可以通过对象的克隆来实现。
对象的克隆使用 clone 关键字,具体语法格式如下:
$对象名2 = clone $对象名1;上述语法格式表示基于对象“$对象名1”克隆出对象“$对象名2”。
为了对比对象变量赋值和对象克隆的区别,下面分别进行代码演示:
1) 对象变量赋值的示例代码如下:
class Person { public $age = 1; } $object1 = new Person(); $object2 = $object1; $object1->age = 10; var_dump($object1->age); // 输出结果:int(10) var_dump($object2->age); // 输出结果:int(10)在上述代码中:
- 第 5 行代码实例化 Person 类得到对象 $object1;
- 第 6 行代码将对象 $object1 赋值给 $object2;
- 第 7 行代码通过对象 $object1 修改 age 属性的值为 10;
- 第 8~9 行代码查看对象 $object1 和对象 $object2 中的 age 属性值,它们的值都为 10。
由此可见,当对对象变量赋值时,两个变量引用同一个对象。
2) 对象克隆的示例代码如下:
class Person { public $age = 1; } $object1 = new Person(); $object2 = clone $object1; $object1->age = 10; var_dump($object1->age); // 输出结果:int(10) var_dump($object2->age); // 输出结果:int(1)在上述代码中:
- 第 6 行代码使用 clone 关键字克隆对象 $object1;
- 第 7 行代码通过对象 $object1 修改 age 属性的值为 10;
- 第 8 行代码查看对象 $object1 中的 age 属性值,输出结果为 10;
- 第 9 行代码查看对象 $object2 中的 age 属性值,输出结果为 1。
由此可见,当对对象克隆时,两个变量引用不同的对象。
PHP __clone()魔术方法
PHP有很多魔术方法,这些方法不需要手动调用,它会在某一刻自动执行,使用魔术方法可以为程序的开发带来极大便利。在克隆对象时,如果想要对新对象的某些属性进行初始化操作,可以通过 __clone() 魔术方法来实现。例如在 Person 类中使用 __clone() 魔术方法,示例代码如下:
class Person { public function __clone() { echo '__clone()方法被执行了'; } }在上述示例代码中,克隆 Person 类的对象时,会自动执行 __clone() 方法,在该方法中可以进行属性的初始化操作。