BASIC TO ADVANCE

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().

Đă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!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha