Nhân bản đối tượng trong PHP

Nhân bản đối tượng trong PHP hay PHP Object Cloning là việc chúng ta sẽ nhân bản một đối tượng nào đó để tạo ra một bản sao của chính nó. Bản sao đối tượng đó được tạo ra bằng cách sử dụng từ khóa clone và bạn không được gọi trực tiếp phương thức __clone(). Trong PHP việc nhân bản một đối tượng ...

Nhân bản đối tượng trong PHP hay PHP Object Cloning là việc chúng ta sẽ nhân bản một đối tượng nào đó để tạo ra một bản sao của chính nó. Bản sao đối tượng đó được tạo ra bằng cách sử dụng từ khóa clone và bạn không được gọi trực tiếp phương thức __clone(). Trong PHP việc nhân bản một đối tượng đang thực hiện theo chiều nông chứ không phải theo chiều sâu. Điều đó có nghĩa là đối tượng chứa cái đối tượng được sao chéo thì không được sao chép. Nếu bạn muốn có một bản sao theo chiều sâu, thì bạn cần xác định qua phương thức __clone ().

1. Nhân bản đối tượng bằng phép gán(assign)

Trong một vài trường hợp, chúng ta muốn nhân bản một đối tượng bằng cách sử dụng toán tử gán. Với cách làm như vậy thì chúng ta hoàn toàn có thể sử dụng lại toàn bộ những thuộc tính và phương thức của đối tượng bị nhân bản, mà không cần khởi tạo lại.

Ví dụ.

<?php
class Animals{
	public $name;
	public $category;
}

// Khởi tạo một đối tượng
$objAnimals = new Animals();

// Gán thuộc tính
$objAnimals->name = "Sư tử";
$objAnimals->category = "Động vật hoang dã";

//Nhân bản đối tượng
$objCopied = $objAnimals;
$objCopied->name = "Con mèo";
$objCopied->category = "Thú cưng";

print_r($objAnimals);
print_r($objCopied);
?>

  Run

Khi chạy đoạn code trên bạn sẽ thu được một kết quả:

Animals Object
(
    [name] => Con mèo
    [category] => Thú cưng
)
Animals Object
(
    [name] => Con mèo
    [category] => Thú cưng
)

Từ đó bạn sẽ đưa ra nhận xét.

  • Khi bạn thay đổi đối tượng nhân bản nó sẽ ảnh hưởng trực tiếp tới đối tượng bị nhân bản.

2. Nhân bản đối tượng bằng từ khoá clone.

Trong phần này chúng ta đang sao chép các đối tượng bằng cách sử dụng từ khoá clone. Phương pháp nhân bản PHP sẽ làm bản sao nông cạn và do đó bất kỳ thay đổi nào được thực hiện trong đối tượng nhân bản sẽ không ảnh hưởng đến đối tượng gốc.

__clone là một phương thức magic trong PHP. Phương thức Magic được xác định trước trong PHP và bắt đầu bằng "__" (double gạch dưới). Chúng được thực hiện nhằm trả về một số sự kiện trong PHP.

<?php
	class Animals
	{
		public $name;
		public $category;
	}
	
	// Khởi tạo một đối tượng
	$objAnimals = new Animals();
	
	// Gán thuộc tính
	$objAnimals->name = "Sư tử";
	$objAnimals->category = "Động vật hoang dã";
	
	//Nhân bản đối tượng
	$objCloned = clone $objAnimals;
	$objCloned->name = "Con mèo";
	$objCloned->category = "Thú cưng";
	
	print_r($objAnimals);
	print_r($objCloned);
?>

  Run

Kết quả khi bạn chạy đoạn code trên.

Animals Object
(
    [name] => Sư tử
    [category] => Động vật hoang dã
)
Animals Object
(
    [name] => Con mèo
    [category] => Thú cưng
)

=>Từ đó bạn rút ra được kết luận gì khi sử dụng toán tử gán và từ khóa clone.

3. Tại sao không sử dụng phép gán = mà lại sử dụng clone. 

Đơn giản là như thế này: Khi các bạn sử dụng phép gán bằng ở đây mình lấy ví dụ là $object2 = $object1, Thì nếu một trong hai đối tượng này thay đổi thì ngay lập tức đối tượng kia cũng sẽ thay đổi theo. Còn ngược lại khi các bạn sử dụng clone thì khi các đối tượng thay đổi chúng sẽ không phụ thuộc vào nhau, mà nó mang tính độc lập.

4. Tổng kết.

Qua bài vieetst này cho thấy, việc sử dụng từ khóa clone trong PHP cho phép ta hoàn toàn có thể tạo ra một đối tượng mới từ đối tượng có sẵn và không làm ảnh hướng hay làm mất đi dữ liệu của đối tượng ban đầu.Việc không phải khởi tạo đối tượng, sẽ tiết kiệm bộ nhớ. Điều này giúp ứng dụng của chúng nhanh hơn.

Bài liên quan

[BÀI 29] CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG PHP

Lập trình hướng đối tượng là gì: lập trình hướng đối tượng là kĩ thuật lập trình hỗ trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn. ...

Tạ Quốc Bảo viết 17:02 ngày 04/10/2018

Nhân bản đối tượng trong PHP

Nhân bản đối tượng trong PHP hay PHP Object Cloning là việc chúng ta sẽ nhân bản một đối tượng nào đó để tạo ra một bản sao của chính nó. Bản sao đối tượng đó được tạo ra bằng cách sử dụng từ khóa clone và bạn không được gọi trực tiếp phương thức __clone(). Trong PHP việc nhân bản một đối tượng ...

Trịnh Tiến Mạnh viết 16:34 ngày 01/10/2018

Nhân bản đối tượng trong Java

Nhân bản đối tượng là một cách để tạo một bản sao của một đối tượng. Để thực hiện mục đích này, bạn sử dụng phương thức clone() . Java.lang.Cloneable Interface phải được triển khai bởi lớp mà có đối tượng cần nhân bản chúng ta muốn tạo. Nếu bạn không triển khai Cloneable Interface , phương ...

Hoàng Hải Đăng viết 13:31 ngày 14/08/2018

Lập trình hướng đối tượng trong PHP

Chúng ta có thể tưởng tượng rằng vũ trụ được tạo từ các đối tượng khác nhau như mặt trời, mặt trăng, trái đất, … Theo cách tương tự, bạn có thể tưởng tượng chiếc xe hơi được tạo từ các đối tượng khác nhau như bánh xe, bánh lái, cần sang số, … Theo cách như vậy, các khái niệm ...

Hoàng Hải Đăng viết 10:16 ngày 14/08/2018

Lập trình hướng đối tượng trong PHP - Phần 3

Xin chào mọi người, đây sẽ là bài viết cuối cùng trong các bài viết về Lập trình hướng đối tượng trong PHP. Ở 2 phần trước mình đã nói tổng quan về lập trình hướng đối tượng trong PHP. Bài viết này mình sẽ nói đến chuẩn PSR và SOLID. Đây là những chuẩn về coding convention trong lập trình PHP. Mong ...

Bùi Văn Nam viết 18:13 ngày 12/08/2018
0