Trong PHP, các đối tượng luôn được truyền theo tham chiếu, không phải theo giá trị. Điều này có nghĩa là khi bạn truyền một đối tượng vào một hàm hoặc gán nó cho một biến khác, cả hai biến đều tham chiếu đến cùng một đối tượng trong bộ nhớ. Nếu bạn thay đổi đối tượng thông qua một trong hai biến, sự thay đổi đó sẽ có hiệu lực trên cả hai, vì chúng đều trỏ đến cùng một đối tượng.
class Person { public $name; public function __construct($name) { $this->name = $name; } } function changeName($obj) { $obj->name = "New Name"; } $person = new Person("Old Name"); changeName($person); echo $person->name; // Output: New Name
Trong ví dụ trên, đối tượng $person
được truyền vào hàm changeName()
theo tham chiếu. Bên trong hàm, tên của đối tượng thay đổi từ “Old Name” thành “New Name”. Khi kiểm tra giá trị của $person->name
bên ngoài hàm, chúng ta thấy rằng giá trị đã thay đổi, chứng tỏ cả biến gốc và biến trong hàm đều tham chiếu đến cùng một đối tượng.
Trong khi các đối tượng được truyền theo tham chiếu, các kiểu dữ liệu cơ bản như số nguyên, chuỗi, và mảng lại thường được truyền theo giá trị. Điều này có nghĩa là nếu bạn truyền một biến kiểu dữ liệu cơ bản vào một hàm, PHP sẽ sao chép giá trị của biến đó, và các thay đổi bên trong hàm sẽ không ảnh hưởng đến biến gốc.
Ví dụ:
function changeValue($x) { $x = 10; } $y = 5; changeValue($y); echo $y; // Output: 5
Trong trường hợp này, $y
không thay đổi vì nó được truyền theo giá trị, không phải tham chiếu.
&
để truyền chúng theo tham chiếu.