zoukankan      html  css  js  c++  java
  • 魔术方法 详解

    /**
    燕十八 公益PHP培训
    课堂地址:YY频道88354001
    学习社区:www.zixue.it
    **/

    <?php
    /***************************************************************************************
    时间:2012年11月13日 20:07:42
    内容:魔术方法
                    是指在某些情况些,会自动执行的方法,叫魔术方法
    详解:
            __construct()
            __destruct()
            __clone()         
            __call()
            __callStatic()
            __get()
            __set()
            __isset()
            __unset()
    ***************************************************************************************/

    header("content-type:text/html; charset=utf-8");

    //__clone  例子
    class Human{
        public $age=22;
        public function __clone(){
            echo '有人克隆我!假冒 <br />';
        }
    }
    $lisi=new Human();
    $zhangsan=clone $lisi;
    /*
    总结:__clone()的作用
        当clone的时候调用
    */



    //__get 例子
    class Human{
        public $name='覃唐弢';
        protected $age=21;
        private  $money='1.2w';
        public function __get($property){
            echo '你想访问我的',$property,'属性 ^_^<br />';
        }
    }
    $lisi=new Human();
    echo $lisi->name,'<br />';
    echo $lisi->age; //你想访问我的age属性 ^_^
    echo $lisi->money; //你想访问我的money属性 ^_^
    echo $lisi->friend; //没有次属性  ->你想访问我的friend属性 ^_^
    /*
     总结:__get()的作用
        当我们调用一个权限上不允许调用的属性
        或不存在的属性时  调用
        __get魔术方法会自动调用
        并且自动传参,参数值是属性名
    */


    //__set 例子
    class Human{
        public $name='覃唐弢';
        protected $age=21;
        private  $money='1.2w';
        public function __set($key, $value){
            echo '你想设置属性:',$key,'  且值是:',$value,' ^_^<br />';
        }
    }
    $lisi=new Human();
    $lisi->friend='itao'; //不存在的属性:你想设置属性:friend 且值是:itao ^_^
    $lisi->name='my';
    $lisi->age=22; //修改存在的protected属性值:你想设置属性:age 且值是:22 ^_^
    $lisi->money='1.4w'; //修改存在的private属性值:你想设置属性:money 且值是:1.4w ^_^
    /*
    总结:__set()的作用
        当为无权限操作的属性赋值时
        或不存在的属性赋值时
        __set()自动调用

        且自动传2个参数 属性 属性值
    */


    //__isset 例子
    class Dog{
        public $leg = 4;
        public function __isset($p){
            echo '你想判断我的',$p,'属性是否存在<br />';
        }
    }

    $hu = new Dog();
    if(isset($hu->leg)){
        echo $hu->leg,'<br />';
    }

    if(isset($hu->tail)){
        echo $hu->tail;
    }else{
        echo '没有tail <br />';
    }
    /*
    总结: __isset()的作用
    当isset() 判断对象不可见的属性是(protected/private/不存在的属性)
    会引起__isset()执行

    问:isset($obj->aa)属性,为真,能说明 类声明了一个aa属性吗?
    答:不能
    */


    //unset 例子
    class Dog{
        public $leg = 4;
        protected $bone='骨头';
        public function __unset($property){
            echo '你想去掉我的',$property,'<br />';
        }
    }

    $dog = new Dog();
    echo $dog->leg,'<br />';
    print_r($dog); echo '<br />';
    unset($dog->leg);
    print_r($dog); echo '<br />';

    unset($dog->bone); //你想去掉我的bone

    /*
    总结: __unset
        当用unset 销毁对象的不可见对象时
        会执行 __unset
    */

    //__call  _callStatic例子
    class Human{
        public function hello(){
            echo 'hello........<br />';
        }
        protected function a(){
            echo 'a.......<br />';
        }
        private function t(){
            echo 't.....<br />';
        }
        //php5.3
        public static function __callStatic($method,$arguments){
             echo '有对象想调用不可见或不存在静态',$method,'方法<br />';
            echo '还传了参数<br />';
            print_r($arguments);
        }
        public function __call($method, $arguments){
            echo '有对象想调用不可见或不存在的',$method,'方法<br />';
            echo '还传了参数<br />';
            print_r($arguments);
        }
    }

    $lisi = new Human();
    $lisi->hello();
    $lisi->a();
    $lisi->say(1);
    //调用一个未定义的方法
    //Fatal error: Call to undefined method Human::say()
    Human::cry('痛哭','嚎哭','鬼哭');

    /*
    总结:__call
        当调用 不可见或不存在(protected/private/不存在的属性)
        的方法时,自动调用
        __call 会传入两个参数:
            第一个参数:方法名$method
            第二个参数:参数    $arguments[array]
     
     总结:__callStatic
        当调用 不可见或不存在(protected/private/不存在的属性)
        的[静态方法]时,自动调用
        __callStatic 会传入两个参数:
            第一个参数:方法名$method
            第二个参数:参数    $arguments[array]

    __callStatic  是php5.3新增的魔术方法
    */

  • 相关阅读:
    MySQL导出数据库、数据库表结构、存储过程及函数
    个人支付接口
    C# WPF,XAML 跨平台应用框架
    uniapp 第三方组件库
    C语言图形界面库
    微信小程序 获取cookie 以及设置 cookie
    stm32资源网
    找最长连续重复字母子串
    asp .net web api Swagger简单实用
    跨域问题
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2777800.html
Copyright © 2011-2022 走看看