Tiếp tục với magic methods, bài này mình sẽ giới thiệu với mọi người về 3 phương thức còn lại là set_state(), __clone() và __debugInfo() trong PHP.
1, Phương thức __set_state().
-Đây là phương thức ít được sử dụng nhất trong PHP và hầu như là không bao giờ ( trong mấy năm đi khách của mình, mình chưa bao giờ sử dụng phương thức này). Phương thức này sẽ được gọi khi chúng ta var_export() đối tượng.
Cú pháp:
public static function __set__state($arr)
{
//code
}
Trong đó: $arr là mảng giá trị truyền vào.
VD:
+Khi chưa sử dụng __set_state():
<?php
class ConNguoi
{
private $name = "Vũ Thanh Tài";
private $age = 20;
}
$connguoi = new ConNguoi();
eval(var_export($connguoi, true) . ';');
//Call to undefined method ConNguoi::__set_state()
+Khi sử dụng __set_state():
<?php
class ConNguoi
{
private $name = "Vũ Thanh Tài";
private $age = 20;
public static function __set_state(array $arr)
{
foreach ($arr as $key => $value) {
echo $key . '->' . $value . '<br/>';
}
}
}
$connguoi = new ConNguoi();
eval(var_export($connguoi, true) . ';');
/*
name->Vũ Thanh Tài
age->20
*/
2, Phương thức __clone().
-Phương thức __clone()
được gọi khi chúng ta clone object.
Cú Pháp:
public function __clone()
{
//code
}
VD:
+Khi chưa sử dụng __clone():
<?php
class ConNguoi
{
public $name = "Vũ Thanh Tài";
public $age = 21;
}
$connguoi = new ConNguoi();
$connguoi2 = clone $connguoi;
echo $connguoi2->name;
//Vũ Thanh Tài
+Khi sử dụng __clone():
<?php
class ConNguoi
{
public $name = "Vũ Thanh Tài";
public $age = 21;
public function __clone()
{
echo 'Phương thức __clone() được gọi';
}
}
$connguoi = new ConNguoi();
$connguoi2 = clone $connguoi;
// Phương thức __clone() được gọi
echo $connguoi2->name;
// Vũ Thanh Tài
3, Phương thức __debugInfo().
-Phương thức __debugInfo()
được gọi khi chúng ta var_dump()
đối tượng. Thông thường, khi chúng ta var_dump()
một đối tượng thì nó sẽ trả về tất cả các thuộc tính và giá trị của nó trong đối tượng đó, nhưng khi chúng ta sử dụng phương thức __debugInfo()
thì chúng ta có thể tùy chỉnh thông số trả về.
Cú Pháp:
VD:
+Khi chưa sử dụng __debugInfo():
<?php
class ConNguoi
{
public $name = "Vũ Thanh Tài";
public $age = 21;
}
$connguoi = new ConNguoi();
var_dump($connguoi);
/*
object(ConNguoi)#1 (2) {
["name"]=>
string(14) "Vũ Thanh Tài"
["age"]=>
int(21)
}
*/
+Khi sử dụng __debugInfo():
<?php
class ConNguoi
{
public $name = "Vũ Thanh Tài";
public $age = 21;
public function __debugInfo()
{
return [
'name' => $this->name,
];
}
}
$connguoi = new ConNguoi();
var_dump($connguoi);
/*
object(ConNguoi)#1 (1) {
["name"]=>
string(14) "Vũ Thanh Tài"
}
*/
3, Lời kết.
-Phần trên mọi người chỉ cần chú ý đến phương thức __clone() và __debugInfo(), còn phương thức __set_state() mọi người có thể clean nó ngay và luôn ( trả bao giờ dùng). Và phần này cũng là phần kết thúc cho series magic methods của mình.
Chúc một ngày vui vẻ!
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
Cảm ơn về bài viết của anh.
MaiNT
5 năm trước