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

Bài 23: Magic methods toString và invoke trong PHP


Bài này chúng ta sẽ tập trung tìm hiểu về 2 magic methods là __toString và invoke() trong PHP.

1, __toString().

-Phương thức __toString() sẽ được gọi khi chúng ta dùng đối tượng như một string.

Cú pháp:

public function __toString()
{
    //code
}

VD:

+Khi chưa sử dụng __toString()

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;
}

echo new ConNguoi();
//Kết quả: Catchable fatal error: Object of class ConNguoi could not be converted to string

+Khi sử dụng __toString()

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;

    public function __toString()
    {
        return 'Phương thức __toString() được gọi';
    }
}

echo new ConNguoi();
//Kết quả: Phương thức __toString() được gọi

2, __invoke().

-Phương thức __invoke() sẽ được gọi khi chúng ta sử đối tượng như một hàm.

Cú pháp:

public function __invoke(arguments)
{
    //code
}

Trong đó: arguments là các tham số các bạn muốn truyền vào, nếu không truyền gì vào thì bỏ trống.

VD:

+Khi không có __invoke()

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;
}

$congnuoi = new ConNguoi();

$congnuoi();
//Kết quả: Fatal error: Function name must be a string

+Khi dùng __invoke()

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;

    public function __invoke()
    {
        echo 'Phương thức __invoke() được gọi';
    }
}

$congnuoi = new ConNguoi();

$congnuoi();
//Kết quả: Phương thức __invoke() được gọi

+Truyền tham số trong __invoke()

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;

    public function __invoke($name)
    {
        if ($name === 'name') {
            echo $this->name;
        }
    }
}

$congnuoi = new ConNguoi();
$congnuoi('name');
//Kết quả: Vũ Thanh Tài

3, Lời kết.

-Như vậy phần này mình đã giới thiệu xong với mọi người về 2 magic methods __toString() và  __invoke() trong PHP rồi, phần tiếp theo chúng ta sẽ tìm hiểu về __set_state() và __debugInfo().

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

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