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     }

转载于:https://www.cnblogs.com/Renyi-Fan/p/9487387.html

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

  1. C++多继承中重写不同基类中相同原型的虚函数

    在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA  {  public:  virtual void TestA();  };  class ...

  2. C++类与对象(类中的六大默认成员函数)

    文章目录 类的默认成员函数 构造函数 概念 特征 自己定义构造函数 类中编写 传参方法 编译器自动生成的构造函数 定义变量方式 初始化规则 析构函数 概念 特性 自己定义析构函数 编译器自动生成的析构 ...

  3. PHP中的__get()和__set()方法获取设置私有属性

    在类的封装中,获取属性可以自定义getXXX()和setXXX()方法,当一个类中有多个属性时,使用这种方式就会很麻烦.为此PHP5中预定义了__get()和__set()方法,其中__get()方法 ...

  4. python类中调用另一个程序函数_Python:如何在另一个类中调用函数

    我被一些python脚本困住了 https://python4kids.brendanscott.com/2014/12/02/hooking-up-the-sunfish-chess-engine- ...

  5. 模板类中 typename的用法,以及函数的定义和声明

    typename 的用法: 第一种 template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了 第二种: 嵌套从属名 ...

  6. C++ string类中的find()函数的简单使用

    #include<iostream> using namespace std; int main(){string s1 = "abcdefa";string s2 = ...

  7. Random类中的nextInt()函数

    Random的两个nextInt函数: 1.Random的nextInt()是无参函数,用来随机生成-~范围之间的整数: 2.Random的nextInt(int n)函数用来随机生成[0,n)之间的 ...

  8. C++学习笔记-----永远不要在派生类中改变虚函数的默认参数值

    提到虚函数,我们就会自然而然的想到多态,但是当虚函数中存有默认参数值的时候,在派生类中重定义这个虚函数时不可以改变这个参数的值. 请看下面的例子: #include "stdafx.h&qu ...

  9. python 类方法 函数_Python OOP类中的几种函数或方法总结

    概述 实例方法 使用实例调用时,默认传递实例本身到实例方法的第一个参数self 使用类调用时,必须传递一个实例对象到实例方法的第一个参数 静态方法 使用实例调用和类调用效果相同; 类方法 装饰器版: ...

最新文章

  1. VS不显示最近打开的项目
  2. arXiv | 图表示方法驱动大分子计算研究
  3. python做数据分析的包_用Python做数据分析,Numpy,Pandas,matp
  4. 从源码角度看Android系统SystemServer进程启动过程
  5. 音视频技术开发周刊 | 152
  6. Spring核心接口之Ordered
  7. 【MySQL】源码安装MySQL
  8. 笔记本电脑下载python视频-Python的用法笔记本
  9. shell第二次练习
  10. Linux根据端口号或者关键字查询进程,重启Tomcat服务脚本优缺点说明
  11. Android APP压力测试 之Monkey日志自动分析脚本
  12. 外壳防护等级/IP防护等级说明
  13. 设置页数自增页眉/页脚——Word中page域代码的使用
  14. win10系统进行电脑分盘
  15. CDN加速是什么?具体有什么用?
  16. 用Matlab把SMAP vegetation optical depth (VOD)数据转换成带投影信息EASE GRID2的tif文件
  17. java代码随机取名字
  18. Altium Designer PCB板框扩大
  19. 片上总线Wishbone 学习(四)接口信号定义
  20. 【计算机毕业设计】课堂考勤微信小程序 基于微信小程序的课堂考勤管理系统

热门文章

  1. div溢出显示时用省略号结尾 .
  2. NVelocity模板引擎初学总结。[zhuan]
  3. SQL分页的三种方法
  4. 小白袍 -- Chapter 1 Java中的Encode与Decode
  5. 配置文件http://www.cnblogs.com/Jevon-ran/p/7112007.html
  6. 【网络流24题】试题库问题
  7. 《随笔记录》20170310
  8. C语言函数指针 和 OC-Block
  9. 阿里云助力合作伙伴帮助政府、企业体验云计算大数据魅力!
  10. 最为一个领导,我该怎么领导