Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 21: Magic methods call và callStatic trong PHP

Bài trước chúng ta đã được tìm hiểu về magic methods tác động đến thuộc tính rồi, và trong PHP cũng có 2 magic methods hỗ trợ tác động đến phương thức trong đối tượng là __call()__callStatic().

1, __call().

-Phương thức __call() sẽ được gọi khi chúng ta gọi một phương thức không được phép truy cập từ bên ngoài hoặc không tồn tại.

Cú pháp:

public function __call($methodName, $arguments)
{
    //code
}

Trong đó:

  • $methodName là tên phương thức mà các bạn đang tiến hành gọi.
  • $arguments là mảng các thành phần mà các bạn đang truyền vào trong phương thức.

VD:

+Không sử dụng magic methods

<?php

class ConNguoi
{
    private $name = "Vũ Thanh Tài";

    private function getName()
    {
        echo $this->name;
    }
}

$connguoi = new ConNguoi();

$connguoi->getName();
//Kết Quả: Call to private method ConNguoi::getName()

+Khi sử dụng magic methods

<?php

class ConNguoi
{
    private $name = "Vũ Thanh Tài";
    private $age = 22;

    public function __call($methodName, $arguments)
    {
        echo 'Bạn vừa gọi phương thức: ' . $methodName . ' và có các tham số: ' . implode('-', $arguments);
    }

    private function getInfo()
    {
        echo $this->name . ' + ' . $this->age;
    }
}

$connguoi = new ConNguoi();

//Khi không truyền tham số.
$connguoi->getInfo();
//Kết quả: Bạn vừa gọi phương thức: getInfo và có các tham số:

//Khi truyền tham số
$connguoi->getInfo('name', 'age');
//Kết quả: Bạn vừa gọi phương thức: getInfo 
//và có các tham số: Bạn vừa gọi phương thức: getInfo và có các tham số: name-age

2, __callStatic().

-Phương thức __callStatic() sẽ được gọi khi chúng ta gọi một phương thức tĩnh không được phép truy cập từ bên ngoài hoặc không tồn tại.

Cú pháp:

public static function __callStatic($methodName, $arguments)
{
    //code
}

Trong đó:

  • $methodName là tên phương thức tĩnh mà các bạn đang tiến hành gọi.
  • $arguments là mảng các thành phần mà các bạn đang truyền vào trong phương thức.

VD:

+Khi không sử dụng static:

<?php

class ConNguoi
{
    private $name = "Vũ Thanh Tài";
    private $age = 22;

    private static function getInfo()
    {
        echo $this->name . ' + ' . $this->age;
    }
}

ConNguoi::getInfo();
//Kết Quả: Call to private method ConNguoi::getInfo()

+Khi sử dụng static.

<?php

class ConNguoi
{
    private $name = "Vũ Thanh Tài";
    private $age = 22;

    public static function __callStatic($methodName, $arguments)
    {
        echo 'Bạn vừa gọi phương thức: ' . $methodName . ' và có các tham số: ' . implode('-', $arguments);
    }

    private static function getInfo()
    {
        echo $this->name . ' + ' . $this->age;
    }
}

ConNguoi::getInfo();
//Kết Quả: Bạn vừa gọi phương thức: getInfo và có các tham số:

/*Khi truyền tham số*/
ConNguoi::getInfo('name', 'age');
//Kết quả: Bạn vừa gọi phương thức: getInfo và có các tham số: name-age

3, Lời kết.

-Như vậy mình đã giới thiệu với mọi người xong về __call()__callStatic() trong PHP rồi. Và đây cũng là một phần được sử dụng khá là nhiều trong core của Laravel.

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