How to use the object-oriented magic method __call function in PHP

coldplay.xixi
Release: 2023-03-03 17:46:01
Original
2218 people have browsed it

PHP uses the __call function of the object-oriented magic method: 1. When an inaccessible member method is called, the [__call] magic method will be called; 2. The member method does not exist and the member method When it is protected or private, the [__call] magic method is called.

How to use the object-oriented magic method __call function in PHP

PHP uses the __call function of the object-oriented magic method:

Basic introduction:

(1) When we call an inaccessible member method, the __call magic method will be called.

(2) The inaccessible member method refers to (1 . The member method does not exist, 2. The member method is protected or private)

Requirement

We just hope that inaccessible member methods can be called directly outside the class (private, protected).

Case description

name = $name; $this->hobby = $hobby; } //输出该对象的信息 public function showInfo(){ echo '
名字是 ' . $this->name; foreach($this->hobby as $hobby){ echo '
爱好有 ' . $hobby; } } //会做算术题, 保护的 protected function getSum($num1, $num2){ return $num1 + $num2; } //编写这个__call魔术方法, __call 魔术方法会接收到两个参数 /* @param $method_name 就是函数名 @param $parameters 就是参数,类型是array */ public function __call($method_name, $parameters){ // echo '
method_name = ' . $method_name; // echo '
$parameters
'; // var_dump($parameters); //判断 $this 中是否有 $method_name 函数,有就返回true,否则返回false if(method_exists($this, $method_name)){ return $this->$method_name($parameters[0], $parameters[1]); }else{ return '没有你要调用的函数'; } } } $monk = new Monk('济公', array('no1'=>'腾云驾雾', 'no2'=>'喝酒')); $monk->showInfo(); //当我们直接调用 protected 方法时,就会触发 __call 魔术方法 echo '
结果是' . $monk->getSum(100, 200);
Copy after login

Exercise questions:

play('jiSuan', $n1, $n2, $oper) 得到结果,注意play这个方法,在类中没有定义. 要求 play 是固定的,如果没有按规则写,则给出相应的错误提示! */ class Cat{ public $name; public $age; public function __construct($name, $age){ $this->name = $name; $this->age = $age; } private function jiSuan($n1, $n2, $oper){ $res = 0; switch($oper){ case '+': $res = $n1 + $n2; break; case '-': $res = $n1 - $n2; break; case '*': $res = $n1 * $n2; break; case '/': $res = $n1 / $n2; break; default : echo '你输入的运算符号不对'; } return $res; } //编写一个__call 魔术方法 public function __call($method_name, $parameters){ //先判断是否通过 'play' 调用 if($method_name == 'play'){ //继续 if( method_exists($this, $parameters[0]) ){ //继续 return $this->$parameters[0]($parameters[1], $parameters[2], $parameters[3]); }else{ return ' 你调用的 ' . $parameters[0] . ' 不存在'; } }else{ return ' 你调用的方式有问题 '; } } } $cat = new Cat('小花猫', 3); echo '
运算的结果是 ' . $cat->play('jiSuan', 10, 20, '-');
Copy after login

The above is the detailed content of How to use the object-oriented magic method __call function in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!