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方法

关键代码

 class Time extends Common
{
private $perDayTS;
public function __construct() {
parent::__construct();
$this->perDayTS=24*60*60;
echo "正在调用构造函数".$this->perDayTS;
} public function __get($my_var){
return $this->$my_var;
}

调用

     public function test1(){
$modelTime =new ModelTime();
echo $modelTime->perDayTS;die;
}
 
 
 

PHP类中的__get()和__set函数到底有什么用的更多相关文章

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

    当试图获取一个不可达变量时,类会自动调用__get. 同样的,当试图设置一个不可达变量时,类会自动调用__set. 在网站中,这两个并不是什么非用不可的函数.   例如: Class Test {   ...

  2. PHP中的__get和__set理解

    先来了解一下PHP类中的__get和__set函数 当我们试图获取一个不可达属性时(比如private),类会自动调用__get函数.当试图设置一个不可达属性时(比如private),类会自动调用__ ...

  3. 【转载】 C++多继承中重写不同基类中相同原型的虚函数

    本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...

  4. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  5. MFC 如何在一个类中使用在其他类中定义的变量或函数

    [声明:本文的知识点来源于网络,参考网址:https://blog.csdn.net/bill_ming/article/details/7407848] [以下三种方法亲测有效,可以根据具体情况来选 ...

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

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

  7. PHP – 在类中使用array_filter时回调函数的问题

    了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 privat ...

  8. PHP面向对象魔术方法之__get 和 __set函数

    l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...

  9. 【c++】类中带默认参数的函数

    反思两个问题 1. 带默认参数的函数,为何声明.定义不能同时有参数? 2. 带默认参数的函数, 为何带默认参数的参数靠后站? 上程序 #include <iostream> #includ ...

随机推荐

  1. GenIcam标准(五)

    2.8.10.Enumeration, EnumEntry Enumeration节点把一个名称(name)映射到一个索引值(index value),并实现Ienumeration接口.Enumer ...

  2. 虚构造函数与prototype

    注意,构造函数不能是虚的,不然不会生效?(构造函数里面调用虚的函数,也不会生效). 而虚构造函数,指的是通过一个虚函数,来调用clone方法,生成一个新的实例.而这个clone里面,一般调用的是拷贝构 ...

  3. [Python] Pandas load DataFrames

    Create an empty Data frame with date index: import pandas as pd def test_run(): start_date='2017-11- ...

  4. iOS 实现QQ界面

    应师傅要求编写个QQ界面来不吝赐教下我的代码问题. 编写个QQ界面.有三个组,每一个组有人.并显示在线不在线. 先看一下效果图 这里省了事由于我的图片仅仅用了一张.假设要依据人的不同设置,仅仅要在ce ...

  5. fs路径位置与widget路径转换

    var fs = api.require('fs'); fs.exist({ path: 'fs://res/yltmusic.mp4' }, function(ret, err) { if (!re ...

  6. Centos7 zabbix3.4.6的安装部署 (二)

    接着安装zabbix客户端 直接安装在服务器上 监控服务器 ip 192.168.161.25 yum -y install zabbix-agent #通过Yum安装zabbix客户端 接着配置za ...

  7. POJ 3265 DP

    思路: f[i][j]表示前i天能做j道题 (是做 不是做完) if(f[i-1][k]) if(suma[j]-suma[k]+g[i-1][k]<=n) f[i][j]=1,g[i][j]= ...

  8. netflix feign概述

    1.什么是feign?feign的作用是什么? Feign is a java to http client binder inspired by Retrofit, JAXRS-2.0, and W ...

  9. ES6学习笔记(九)Set和Map数据结构

    1.set 基本等于Java的Set集合类型,无序不可重复集,常被用来去重. 基本用法 const s = new Set();//通过Set()构造函数创建 [2, 3, 5, 4, 5, 2, 2 ...

  10. 23种JavaScript设计模式

    原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500491f3f7f 转自: https:/ ...