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()
và __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()
và __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!
0 Comments