Phương thức ma thuật toString trong OOP PHP
Phương thức ma thuật đầu tiên chúng ta
học, được gọi là __toString. Nó
được gọi khi cố gắng chuyển đổi một thể hiện của lớp
thành chuỗi. Hãy cùng tìm hiểu điều đó
có nghĩa là gì. Giả sử chúng ta có lớp
User như sau:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Hãy tạo một đối tượng của lớp này:
<?php
$user = new User('john', 25);
?>
Và bây giờ hãy thử in đối tượng đã tạo
qua echo:
<?php
$user = new User('john', 25);
echo $user;
?>
Việc cố gắng in đối tượng qua echo
chính là chuyển đổi thành chuỗi. Trong
trường hợp này, PHP sẽ đưa ra lỗi, bởi vì không
phải tự nhiên mà các đối tượng có thể chuyển thành chuỗi.
Để loại bỏ lỗi, chúng ta phải
nói với PHP một cách rõ ràng, phải làm gì khi
cố gắng chuyển đổi đối tượng thành chuỗi. Vì
mục đích này mà phương thức ma thuật
__toString tồn tại.
Nếu trong mã của lớp chúng ta tạo ra một phương thức như vậy,
thì kết quả của phương thức đó (tức là những gì
nó trả về qua return) sẽ là biểu diễn dạng chuỗi
của đối tượng.
Giả sử chúng ta muốn khi cố gắng in
đối tượng qua echo, tên của
user được in ra. Điều đó có nghĩa là chúng ta tạo phương thức __toString
và trả về trong nó giá trị của thuộc tính name:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// Triển khai phương thức đã chỉ định:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Hãy kiểm tra:
<?php
$user = new User('john', 25);
echo $user; // sẽ in ra 'john' - mọi thứ hoạt động!
?>
Tạo lớp User, trong đó có
các thuộc tính name và surn.
Hãy làm sao để khi
in đối tượng qua echo ra màn hình
sẽ in ra một chuỗi chứa tên và họ của người dùng.