• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > PHP如何使用面向对象魔术方法之__call函数

PHP如何使用面向对象魔术方法之__call函数

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了PHP,面向对象,魔术方法,__call函数等相关知识,希望对您有所帮助

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


PHP如何使用面向对象魔术方法之__call函数


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

基本介绍:

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

(2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 private)

需求

我们就是希望,在类的外部直接调用不可访问的成员方法(private , protected).

案例说明

<?php    header('content-type:text/html;charset=utf-8');    //__call魔术方法    class Monk{        public $name;        protected $hobby;        public function __construct($name, $hobby){            $this->name = $name;            $this->hobby = $hobby;        }        //输出该对象的信息        public function showInfo(){            echo '<br> 名字是 ' . $this->name;            foreach($this->hobby as $hobby){                echo '<br> 爱好有 ' . $hobby;            }        }        //会做算术题, 保护的        protected function getSum($num1, $num2){            return $num1 + $num2;        }        // 编写这个__call魔术方法, __call 魔术方法会接收到两个参数        /*        * @param $method_name 就是函数名        * @param $parameters 就是参数,类型是array        */        public function __call($method_name, $parameters){            // echo '<br> method_name = ' . $method_name;            // echo '<br> $parameters <br>';            // 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 '<br> 结果是' . $monk->getSum(100, 200);

练习题:

<?php    header('content-type:text/html;charset=utf-8');    /*    练习题:     请编写一个Cat类(有 年龄, 名字 二个属性),要求二个属性全部都是public。    Cat类有一个 方法 jiSuan($n1, $n2, $oper) 可以计算+ - * / 是私有的.    在类外部,$对象名->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;         &nbs
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何使用yum安装指定版本的php
  • PHP存入mysql乱码怎么办
  • laravel与thinkphp之间的区别与优缺点
  • ThinkPhp5.1制作微信支付以及支付后的几种状态说明
  • PHP读取文件的两种方式:file_get_contents和fread(附代码实例)
  • 记录某PHP后台系统,图片无法上传处理过程
  • PHP怎么只保留汉字
  • PHP怎么返回四位数不满补零
  • ThinkPHP3.2.3如何从php5升级到php7
  • PHP怎么遍历数组替换数组中的元素的值

相关文章

  • PHP怎么使用header()设置页面编码
  • Photoshop设计绚丽闪电效果的网页宣传广告
  • Photoshop制作61儿童节绚丽艺术字教程
  • Photoshop绘制宝石风格的LOGO设计教程
  • MySQL中 IN和NOT IN用法详解
  • PS制作非常逼真的针织吊牌
  • MySQL8.0版本和PHP7不兼容问题?
  • 填坑记录:laravel passport与手机短信登录结合
  • Photoshop制作立体效果的图案艺术字
  • phpsotrm设置内存限制后打不开了怎么办?

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 在PHP中如何使用后期静态绑定
    • Laravel实现谷歌点图验证码【推荐】
    • 详解Angular中的NgModule(模块)
    • WordPress怎么实现评论自动填写QQ邮箱与昵称?
    • html5的drag和drop的用法示例
    • Postman是如何实现接口的自动化测试
    • LayUI如何导入excel文件
    • Phpcms V9 栏目图片调用方法
    • Illustrator制作电视台标志
    • 重新对百度支付进行编写封装(百度智能小程序支付)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有