zoukankan      html  css  js  c++  java
  • php类知识点滴---魔术方法,系统在特定时机触发的方法

    • __get()获取私有或受保护属性时调用的方法
    <?php
    class coach
    {
        private $chairfit = "徐晓冬";
        public function __construct()
        {
            echo "欢迎来到~必图拳馆训练~";
        }
        public function __get($chairfit)
        {
            echo $chairfit;//只打印属性名
        }
    }
    class xxd extends coach
    {
       public function __construct()
       {
           echo "像个男人一样去战斗!"."
    ";
       }
    
    }
    $cj = new xxd();
    $cj ->chairfit;
    ?>
    输出结果:

    像个男人一样去战斗!               #构造方法调用结果
    chairfit                                  #继承自父类的__get()方法



    #这样可以访问父类私有属性的值
    <?php
    class coach
    {
    private $chairfit = "徐晓冬";
    public function __construct()
    {
    echo "欢迎来到~必图拳馆训练~";
    }
    public function __get($chairfit)
    {
    if ($chairfit=='chairfit')
    {
    return $this->chairfit;
    }
    }
    }
    class xxd extends coach
    {
    public function __construct()
    {
    echo "像个男人一样去战斗!"." ";
    }

    }
    $cj = new cj();
    print($cj ->chairfit);
    ?>
    输出结果:

    像个男人一样去战斗!         #构造方法调用结果
    徐晓冬        #通过父类的__get()方法访问父类私有属性

     
    •  __set()对私有或受保护属性设置值
    <?php
    class coach
    {
        protected $chairfit = "徐晓冬";
        public function __construct()
        {
            echo "欢迎来到~必图拳馆训练~";
        }
        public function __get($chairfit)
        {
            if ($chairfit=='chairfit')
            {
                return $this->chairfit;
            }
        }
    }
    class cj extends coach
    {
       public function __construct()
       {
           echo "欢迎来到北武堂训练"."
    ";
       }
       public function __set($name,$value)  
    #当然,这__set()方法也可以写到父类中去,这里仅仅是为了展示继承特性中子类可以实现对父类属性,方法的继承 { echo
    "hello,我是".$value.",你的巴西柔术教练!"; } } $cj = new cj(); $cj ->chairfit='劲儿弟弟'; ?>

    输出结果:

    欢迎来到北武堂训练
    hello,我是劲儿弟弟,你的巴西柔术教练!

     
    • 拓展:在__set()或者__get()中,如果涉及多个不能直接访问的属性(例如:受保护或私有属性)
    <?php
    class coach
    {
        protected $chairfit = "徐晓冬";
        private $lover = "丁大锅";
        public function __construct()
        {
            echo "欢迎来到~必图拳馆训练~";
        }
        public function __get($chairfit)
        {
            return $this->$chairfit;
    #注意;这里$chair是形参,如果写作chairfit,那么无论在实例化对象中访问设置什么属性,只会访问或修改父类中的属性
    protected $chairfit
    
    

    } }

    class cj extends coach

    {

      public function __construct()

      {

        echo "欢迎来到北武堂训练"." ";

      }

      public function __set($name,$value)

      {

        $this->$name = $value;

    #注意;这里$name是形参,如果写作name,那么无论在实例化对象中访问设置什么属性,只会访问或修改父类中的属性protected $chairfit

      }

      public function whoilove($lover)

      {

        echo "我喜欢".$lover;

      }

    }

    $cj = new cj();

    print("掌门人是:".$cj->chairfit." ");

    print("我喜欢:".$cj->lover." ");

    ?>

    输出结果:

    欢迎来到北武堂训练
    掌门人是:徐晓冬
    我喜欢:丁大锅

     根据上面的代码,继续拓展

    $cj->whoilove($cj->lover);
    $cj->lover='陈培昌';   #调用了__set()方法实现对父类私有属性$lover的设置
    $cj->whoilove($cj->lover)

    输出结果:

    我喜欢丁大锅
    我喜欢陈培昌

  • 相关阅读:
    JAVA嵌入运行Groovy脚本
    git撤销本地所有未提交的更改
    Java连接S3并上传Redis
    jython笔记
    Elasticsearch 5.2.x 使用 Head 插件连接不上集群
    elasticsearch 5.1 别的机器无法访问9200端口
    elasticsearch,http://ip:9200访问不到的解决办法
    在centos7中安装nodejs(npm )
    java标识符和关键字
    Java平台
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/10958937.html
Copyright © 2011-2022 走看看