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

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.

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