zoukankan      html  css  js  c++  java
  • PHP类中的__get()和__set函数到底有什么用

    PHP类中的__get()和__set函数到底有什么用

    一、总结

    一句话总结:当试图获取一个不可达变量时,类会自动调用__get。同样的,当试图设置一个不可达变量时,类会自动调用__set。在网站中,这两个并不是什么非用不可的函数。所以可以用于输出提示消息,或者返回值。

    1、php中使用什么代替java面相对象中的常用的get和set方法?

    类默认自带的__get()和__set()

    2、php中类中默认自带的__get()方法什么时候被调用?

    当试图获取一个不可达变量时,类会自动调用__get

    所以在php中相当于可以直接用对象访问私有属性(因为会自动调用__get()方法)

    3、php中如何调用类的私有属性?

    a、new对象($modelTime =new ModelTime();

    b、用new出来的对象直接调用属性(echo $modelTime->perDayTS;die;

    c、在类中要写__get()方法返回值

    10     public function __get($my_var){
    11         return $this->$my_var;
    12     }

    二、PHP类中的__get()和__set函数到底有什么用?

    当试图获取一个不可达变量时,类会自动调用__get。

    同样的,当试图设置一个不可达变量时,类会自动调用__set。
    在网站中,这两个并不是什么非用不可的函数。
     
    例如:
    Class Test
    {
        private $a = 1;
        private $b = 2;
        public  $c = 3;
     
        public function  __get($vname)
        {
            return "you can not get";
        }
     
        public function __set($vname,$value)
        {
            echo  "you can not set";
        }
    }
     
    $t = new Test;
     
    echo $t->a;//这里试图要打印出私有变量
    $t->b=3;//这里试图要把私有变量进行设置
     
    想要直接对私有变量操作,当然是做不到的。
    于是在读取的时候,调用__get(),输出“you can not get”;
    在设置的时候,调用__set(),输出“you can not set”。
     
    顺便提一下,__get()和__set()函数要设置为public,要不然会Warning。
    __get()和__set()函数定义时的参数分别为1个和2个,不管函数中到底有没用,都是不可省略的。
     
    通过修改__get()和__set()函数内部的语句,就可以实现在外部调用类的私有变量。
    例如:
    private __get($vname)
    {
        return $this->$vname;
    }
    如果$vname的值是a,那么就返回了正确的值。
    __set()也同理。
     

    public function __set($vname,$value)
    {
        $this->$vname = $value;
    }

     

    参考:

    PHP类中的__get()和__set函数到底有什么用? - East2_100 - 博客园
    https://www.cnblogs.com/east2-100/p/5272699.html

     
     

    三、php中使用类默认自带的__get()和__set()代替java中的常用的get和set方法

    关键代码

     1 class Time extends Common
     2 {
     3     private $perDayTS;
     4     public function __construct() {
     5         parent::__construct();
     6         $this->perDayTS=24*60*60;
     7         echo "正在调用构造函数".$this->perDayTS;
     8     }
     9 
    10     public function __get($my_var){
    11         return $this->$my_var;
    12     }

    调用

    1     public function test1(){
    2         $modelTime =new ModelTime();
    3         echo $modelTime->perDayTS;die;
    4     }
     
     
     
  • 相关阅读:
    Android之退出整个应用方法
    自定义popupwindow(解决位置控制困惑)
    日期格式转换
    简单用于测试的listview的视图
    复制res下文件进sd卡
    自定义九宫格式的弹出menu
    动画隐藏或者显示控件
    截取p3片段
    微信几种动画进入退出应用
    codeforce Round On Sum of Fractions + stl 的应用
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9487387.html
Copyright © 2011-2022 走看看