如何使用PHP面向对象的__call函数

  介绍

这篇文章运用简单易懂的例子给大家介绍如何使用PHP面向对象的__call函数,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

PHP使用面向对象魔术方法之__call函数:1,当调用一个不可以访问的成员方法时,【__call】魔术方法就会被调用;2,该成员方法不存在以及成员方法是保护或者私人时,调用【__call】魔术方法。

<强> PHP使用面向对象魔术方法之__call函数:

<>强基本介绍:

(1)当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用。

(2)不可以访问的成员方法的是指(1。该成员方法不存在,2。成员方法是保护或者私人)

<强>需求

我们就是希望,在类的外部直接调用不可访问的成员方法(私有、保护)。

<>强案例说明

& lt; php ?   头(& # 39;- type: text/html; charset=utf - 8 # 39;);//__call魔术方法   类和尚{   美元的公共名称;   保护美元的爱好;   公共函数__construct(姓名、爱好美元){   $ this→名称=$名称;   $ this→爱好=美元的爱好;   }//输出该对象的信息   公共函数showInfo () {      回声& # 39;& lt; br>名字是& # 39;。$ this→名称;   foreach ($ this→爱好爱好美元){   回声& # 39;& lt; br>爱好有& # 39;。美元的爱好;   }   }//会做算术题,保护的   保护功能getSum (num1, num2美元){      返回num1 + num2美元;   }//编写这个__call魔术方法,__call魔术方法会接收到两个参数/*   @param method_name就美元是函数名   @param参数就美元是参数,类型是数组   */公共函数__call (method_name美元,美元参数){//echo & # 39; & lt; br>method_name=& # 39;。method_name美元;//echo & # 39; & lt; br>美元参数& lt; br> & # 39;;//var_dump(参数);//判断这中美元是否有美元method_name函数,有就返回真,否则返回错误的   如果(method_exists(这个,method_name美元)){   返回这个→美元method_name(参数[0],美元参数[1]);   其他}{   返回& # 39;没有你要调用的函数& # 39;;   }      }   }   和尚美元=new和尚(& # 39;济公& # 39;,数组(& # 39;第一# 39;=祝辞& # 39;腾云驾雾& # 39;,& # 39;no2 # 39;=祝辞& # 39;喝酒& # 39;));   和尚→美元showInfo ();//当我们直接调用保护方法时,就会触发__call魔术方法   回声& # 39;& lt; br>结果是& # 39;。和尚→美元getSum (100、200);

练习题:

& lt; php ?   头(& # 39;- type: text/html; charset=utf - 8 # 39;);/*   练习题:   请编写一个猫类(有年龄,名字二个属性),要求二个属性全部都是公开的。   猫类有一个方法jiSuan (n1、n2,③美元)可以计算+ - */是私有的。   在类外部,对美元象名→玩(& # 39;jiSuan& # 39;, n1美元,美元n2,③美元)得到结果,注意玩这个方法,在类中没有定义。   要求玩是固定的,如果没有按规则写,则给出相应的错误提示!   */猫类{   美元的公共名称;   公共美元时代;   公共函数__construct(姓名,年龄美元){   $ this→名称=$名称;=$ $ this→年龄年龄;   }      私有函数jiSuan (n1、n2,③美元){      res美元=0;   开关(加工){   & # 39;+ & # 39;   res=$ n1 + n2美元;   打破;   & # 39;& # 39;:   res=$ n1 - n2美元;   打破;   & # 39;* & # 39;:   res=$ n1 * n2美元;   打破;   & # 39;/& # 39;:   res美元=n1、n2美元;   打破;   默认值:   回声& # 39;你输入的运算符号不对& # 39;;   }   返回res美元;   }//编写一个__call魔术方法   公共函数__call (method_name美元,美元参数){//先判断是否通过& # 39;玩# 39;调用   if ($ method_name==& # 39;玩# 39;){//继续   如果(method_exists($, $参数[0])){//继续   返回这个→美元[0]参数(参数[1],美元参数[2],[3]美元参数);   其他}{   返回& # 39;你调用的& # 39;。美元[0]参数。& # 39;不存在& # 39;;   }   其他}{   返回& # 39;你调用的方式有问题& # 39;;   }   }   }   美元猫=new猫(& # 39;小花猫& # 39;(3);   回声& # 39;& lt; br>运算的结果是& # 39;。猫→美元玩(& # 39;jiSuan& # 39;, 10, 20日& # 39;& # 39;);

关于如何使用PHP面向对象的__call函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

如何使用PHP面向对象的__call函数