วิธีการมหัศจรรย์ __toString ใน OOP ของ PHP
วิธีการมหัศจรรย์แรกที่เราจะเรียนรู้ชื่อว่า __toString มันถูกเรียกเมื่อพยายามแปลงอินสแตนซ์ของคลาสเป็นสตริง ลองมาทำความเข้าใจกันว่านี่หมายความว่าอย่างไร สมมติว่าเรามีคลาส User ดังนี้:
<?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;
}
}
?>
ลองสร้างอ็อบเจกต์ของคลาสนี้:
<?php
$user = new User('john', 25);
?>
ทีนี้ลองพยายามแสดงอ็อบเจกต์ที่สร้างผ่าน echo:
<?php
$user = new User('john', 25);
echo $user;
?>
การพยายามแสดงอ็อบเจกต์ผ่าน echo นี่คือการแปลงเป็นสตริงนั่นเอง ในกรณีนี้ PHP จะแสดงข้อผิดพลาด เพราะโดยปกติแล้วอ็อบเจกต์จะไม่ถูกแปลงเป็นสตริงโดยง่าย
เพื่อที่จะลบข้อผิดพลาด เราต้องบอก PHP อย่างชัดเจนว่าควรทำอย่างไรเมื่อพยายามแปลงอ็อบเจกต์เป็นสตริง สำหรับสิ่งนี้เองที่มีวิธีการมหัศจรรย์ __toString
หากในโค้ดของคลาสเราสร้างเมธอดดังกล่าว ผลลัพธ์ของเมธอดนี้ (นั่นคือสิ่งที่มันคืนค่าผ่าน return) จะเป็นตัวแทนของอ็อบเจกต์ในรูปแบบสตริง
สมมติว่าเราต้องการให้เมื่อพยายามแสดงอ็อบเจกต์ผ่าน echo แล้วแสดงชื่อผู้ใช้ออกมา ดังนั้นเรามาสร้างเมธอด __toString และคืนค่าคุณสมบัติ name ในนั้น:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// ดำเนินการเมธอดที่ระบุ:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
ลองทดสอบ:
<?php
$user = new User('john', 25);
echo $user; // จะแสดง 'john' - ใช้งานได้ทั้งหมด!
?>
สร้างคลาส User ซึ่งมีคุณสมบัติ name และ surn ทำให้เมื่อแสดงอ็อบเจกต์ผ่าน echo บนหน้าจอแล้ว แสดงสตริงที่มีชื่อและนามสกุลของผู้ใช้