PHP使用面向对象魔术方法之__call函数:1、当调用一个不可以访问的成员方法时,【__call】魔术方法就会被调用;2、该成员方法不存在以及成员方法是protected或者private时,调用【__call】魔术方法。
PHP使用面向对象魔术方法之__call函数:
基本介绍:
(1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用.
(2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 private)
需求
我们就是希望,在类的外部直接调用不可访问的成员方法(private , protected).
案例说明<?phpheader('content-type:text/html;charset=utf-8');//__call魔术方法classMonk{public$name;protected$hobby;publicfunction__construct($name,$hobby){$this->name=$name;$this->hobby=$hobby;}//输出该对象的信息publicfunctionshowInfo(){echo'<br>名字是'.$this->name;foreach($this->hobbyas$hobby){echo'<br>爱好有'.$hobby;}}//会做算术题,保护的protectedfunctiongetSum($num1,$num2){return$num1+$num2;}//编写这个__call魔术方法,__call魔术方法会接收到两个参数/**@param$method_name就是函数名*@param$parameters就是参数,类型是array*/publicfunction__call($method_name,$parameters){//echo'<br>method_name='.$method_name;//echo'<br>$parameters<br>';//var_dump($parameters);//判断$this中是否有$method_name函数,有就返回true,否则返回falseif(method_exists($this,$method_name)){return$this->$method_name($parameters[0],$parameters[1]);}else{return'没有你要调用的函数';}}}$monk=newMonk('济公',array('no1'=>'腾云驾雾','no2'=>'喝酒'));$monk->showInfo();//当我们直接调用protected方法时,就会触发__call魔术方法echo'<br>结果是'.$monk->getSum(100,200);
练习题:
<?phpheader('content-type:text/html;charset=utf-8');/*练习题:请编写一个Cat类(有年龄,名字二个属性),要求二个属性全部都是public。Cat类有一个方法jiSuan($n1,$n2,$oper)可以计算+-*/是私有的.在类外部,$对象名->play('jiSuan',$n1,$n2,$oper)得到结果,注意play这个方法,在类中没有定义.要求play是固定的,如果没有按规则写,则给出相应的错误提示!*/classCat{public$name;public$age;publicfunction__construct($name,$age){$this->name=$name;$this->age=$age;}privatefunctionjiSuan($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魔术方法publicfunction__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=newCat('小花猫',3);echo'<br>运算的结果是'.$cat->play('jiSuan',10,20,'-');
产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;
日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉;
本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;
部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入;
如若转载,请注明出处:http://www.chanpinyuan.cn/42845.html;