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;
}

时间: 2024-10-09 14:49:43

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

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

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

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

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

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

了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 private function getMutualFromSina ($focusList) { return array_filter($focusList, "filterSinaList"); } private function filterSinaList ($value) { retur

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

l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) (3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法 l 举例说明 需求是: 如果对象有一个成员变量是private.protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办? 代码如下 <?php header('content-type:

关于QFont类中设置字体的一些函数

1 setFamily() 设置字体类型 如宋体 楷体微软雅黑 Consolas 等 2 setStyleName() "Normal" 正常 "Bold" 加粗 "Italic" 斜体 "Bold Italic" 加粗斜体 这个函数的设置还有待验证 3 setPointSize() 设置点大小 4 setPixelSize() 设置像素大小 5 setWeight() 设置粗细 6 setBold(bool) 设置加粗 7

php中的__get和__set方法

1.__get() 作用:当实例化对象调用一个没有定义的属性时,会自动调用__get()方法 当实例化对象调用一个私有或者受保护的属性时,也会调用这个方法,方式类似 结果是:你访问的公开属性:name,不存在 2.__set() 作用:1.给未定义的属性赋值,2.给私有或者受保护的属性赋值. 借鉴: 佳佳嘉佳佳https://www.cnblogs.com/finalanddistance/p/9324177.html 原文地址:https://www.cnblogs.com/cyk2/p/11

eclipse 在类中找不到主函数

有可能工作空间崩溃了,解决办法是删掉workspace 文件夹下的.metadata 文件夹. http://stackoverflow.com/questions/10356854/eclipse-cant-find-load-main-class

C++:类中两个易被忽略的默认函数

C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式.除了大家所熟知的构造函数.拷贝构造函数.赋值函数和析构函数外,C++为自定义类 还提供了两个容易被人忽视的默认函数--取地址函数和对常对象的取地址函数. 一.取地址函数 在C++中可以通过取地址运算符&求得变量的地址,如: 1 int a=10; 2 cout<<"变量a的地址为:"<<&a<<endl; 那么对于自定义类的

类语法规则与类中的函数

类语法 1.关键字class 2.class 类名 类名中不要写括号 3.类名规范:字母.数字.下划线组成,不能以数字开头:驼峰命名法,每个单词首字母大写 4.类属性:放在类中的变量值 调用属性:实例.属性名 5.类方法:类中的函数 调用方法:实例.方法名()---针对实例方法 类属性和类方法都不是类中必须的结构,但是一般都会有,这是类存在的意义 6.类里面的方法分3种: 1)实例方法:这个方法只能实例来调用 必须带有self参数; 括号里的self指的是实例本身,调用该函数时会自动传入实例;