DANH MỤC: PHP HƯỚNG ĐỐI TƯỢNG

Bài 24: Magic methods set_state, clone và debugInfo trong PHP


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()__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()__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ẻ!

Nguồn: Toidicode.com

Thông tin tác giả

TaiVT

TaiVT

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia