首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用魔术方法的OOP PHP,getter和setter

使用魔术方法的OOP PHP,getter和setter是一种面向对象编程的设计模式,用于对对象的属性进行访问和修改。getter和setter方法允许在访问或修改属性之前执行一些额外的操作,例如验证数据、记录日志或执行其他业务逻辑。

在PHP中,魔术方法是指在特定的上下文中自动调用的方法。例如,当使用var_dump()函数时,会自动调用toString()方法。在使用魔术方法的OOP PHP中,getter和setter方法可以通过get()和__set()魔术方法实现。

getter方法用于访问对象的属性,而setter方法用于修改对象的属性。通过使用getter和setter方法,可以确保对象的属性在访问或修改之前经过适当的验证和处理。

优势:

  1. 封装性:getter和setter方法可以确保对象的属性在访问或修改之前经过适当的验证和处理,从而提高了封装性。
  2. 易于维护:使用getter和setter方法可以将对象属性的访问和修改逻辑集中在一个地方,从而使代码更易于维护和扩展。
  3. 易于测试:通过使用getter和setter方法,可以更容易地对对象的属性进行单元测试。

应用场景:

  1. 数据验证:在访问或修改对象属性之前,可以使用getter和setter方法对数据进行验证,以确保数据的正确性。
  2. 日志记录:在访问或修改对象属性时,可以使用getter和setter方法记录日志,以便在后续的操作中使用。
  3. 业务逻辑:在访问或修改对象属性时,可以使用getter和setter方法执行其他业务逻辑,例如计算、通知等。

推荐的腾讯云相关产品:

  1. 云服务器:腾讯云云服务器提供了稳定、高效、安全的云计算服务,可以满足不同规模的业务需求。
  2. 对象存储:腾讯云对象存储服务提供了高可靠、低成本、弹性扩展的存储服务,可以满足不同业务场景的存储需求。
  3. 数据库:腾讯云数据库提供了多种类型的数据库服务,包括关系型数据库、非关系型数据库等,可以满足不同业务场景的数据存储需求。

产品介绍链接地址:

  1. 云服务器:https://cloud.tencent.com/product/cvm
  2. 对象存储:https://cloud.tencent.com/product/cos
  3. 数据库:https://cloud.tencent.com/product/cdb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

通过gettersetter方法访问修改

方法可以执行错误检查,比如检查数据是否合乎规范,输入age是否小于0,直接对域操作则没这种优势 3.可细微划分访问控制:可以只设置域访问器getter,不设置域修改器setter,让用户只能读取,而不能修改...继承 是一种类层次模型,从现有的类中通过extends关键字派生新类,现有的类称为父类,新类称为子类。 子类可以从它父类那里继承方法实例变量,并且可以重写父类方法增加新方法。...一般将通用方法放到超类中,具有特殊用途方法放到子类中。 特点: 不能多重继承。 只能继承非私有的成员变量方法 当子类成员变量与父类成员变量重名时,子类覆盖父类。..., DB2Dao等等 当用户使用你框架时候,他就可以用多态,实现自己数据库连接功能: DaoBaseDao dao = new SQLServerDao(); //针对SQLServer接口实现...同一个事件发生在不同对象上会产生不同结果。 但注意:父类类型引用可以调用父类中定义所有属性方法,而对于子类中定义而父类中没有的方法,它是无可奈何;比如子类中增加方法,父类引用无法调用。

96730
  • Groovy 创建索引属性GetterSetter方法

    在Groovy中,我们可以在类中定义属性,并自动在类文件中生成这些属性gettersetter方法。 如果我们有一个Collection类型属性,我们通常会获得此属性get/set方法。...PropertyElement[] getPropertyName() public void setPropertyName(PropertyElement element[]) 通常,如果我们在Groovy代码中使用我们类...,我们不需要那些额外方法,因为我们可以通过GPath来访问设置Collection类型属性中元素。...但是假设我们类需要从Java代码或IDE访问,我们需要这些额外方法。...我们只需要将@IndexedProperty注释添加到我们属性中,我们就可以得到我们想要额外gettersetter方法: import groovy.transform.IndexedProperty

    1.9K10

    【Groovy】Groovy 方法调用 ( Java 类成员及 setter getter 方法设置 | Groovy 类自动生成成员 getter setter 方法 )

    文章目录 一、Java 类成员及 setter getter 方法设置 二、Groovy 类自动生成成员 getter setter 方法 一、Java 类成员及 setter getter...方法设置 ---- 创建标准 Java 类 , 需要将成员变量设置为私有成员 , 并且为其定义 getter setter 方法 ; class Student { private String...class Student { def name def age } 在 Groovy 中类中 , 不需要定义成员变量 setter getter 方法 , Groovy 会自动生成相关...(18) // 使用 getter 方法获取成员值 println student.getName() println student.getAge() 执行结果 : Tom 18 查看编译后 Student.class...字节码文件 , 可以看到系统为 Student 类自动生成了 getter setter 方法 ; 完整字节码类如下 : // // Source code recreated from

    1.1K30

    Vue引发gettersetter

    看着文档研究了一下vue双向数据绑定,打印出Vue实例下data对象里属性时,发现了一个有趣事情: 它每个属性都有两个相对应getset方法,我觉这是多此一举,于是去网上查了查Vue双向绑定实现原理...而Vue使用发布订阅模式,是点对点绑定数据。 Vue数据绑定只有两个步骤,compile=>link。...这就要用到gettersetter了。...还有另一种方法可以实现这个功能。 ES5对象原型有两个新属性__defineGetter____defineSetter__,专门用来给对象绑定getset。...建议使用下面这种方式,因为是在原型上书写,所以可以继承重用,最近想写点小框架,才发现知识不够用,大家一起加油吧!

    1.5K70

    盘点JavaScript中getter()setter()函数使用

    一、前言 有两种类型属性。 第一种是 数据属性。已经知道如何使用它们了。到目前为止,使用所有属性都是数据属性。 第二种类型属性是新东西。...它们本质上是用于获取设置值函数,但从外部代码来看就像常规属性。 二、Getter setter 访问器属性由 “gettersetter方法表示。...四、更聪明 getter/setter Getter/setter 可以用作“真实”属性值包装器,以便对它们进行更多控制。...五、兼容性 访问器一大用途是,它们允许随时通过使用 getter setter 替换“正常”数据属性,来控制调整这些属性行为。...六、总结 本文基于JavaScript基础,介绍了getter setter函数使用。对于其中属性,通过案例样式,运行效果图展示,进行详细讲解。

    1.6K11

    js对象属性gettersetter

    ES5gettersetter方法,通过 Object.defineProperty 把实例属性全部转为 getter/setter。...故温故一遍gettersetter定义属性方法。 通过对象字面量定义getset方法 有个注意地方,get与set函数体都不能再定义本身该属性,否则执行时候会陷入死循环,抛出栈溢出。...( { set x(v) { }, set x(v) { } } { x: …, set x(v) { } } 是不允许 ) getset都能用delete方法删除 var o = { set...Object.defineProperty 方法 与对象字面量不同,使用 Object.defineProperty 方法可以为任何已存在属性重新定义get与set方法。...,它可以被压缩成为三个步骤: 1.我们需要一个方法来识别哪个UI元素被绑定了相应属性 2.我们需要监视属性UI元素变化 3.我们需要将所有变化传播到绑定对象元素 方法一:利用发布订阅模式,

    3.2K50

    TW洞见〡gettersetter那些事

    这些以getset开头方法,被称为gettersetter。时间久了,这种做法似乎成了一种神圣约定,每个人都记得应该这么写,而忘记了为什么这么写。...但是,当你写了很多程序,写过很多gettersetter,尤其是有些类方法,只有gettersetter时,总会有一天,你会疑惑,我到底为什么要这么干? Why private field?...如果采用文章开始时代码,即添加gettersetter,有新需求出现时,只需修改getName方法,不需要修改调用处代码,即可实现。...Why getter & setter, again? 然而,却并不是所有语言都是这样。比如Java最像C#,虽然也建议将字段设置为private,但是却可以不用gettersetter。...不过,因为这只是通过注解做一种Hack,加了@Data注解,相当于编译器自动生成gettersetter,所以调用代码还是要用getIdgetName这样方法名来访问变量。

    87760

    kotlin中数据类重写setter getter正确方法

    前言 kotlin数据类,由于其内部封装了gettersetter方法,极大地简化了我们编程代码,但同时其不能像java那样方便重写getter或者setter方法,也给大家造成了一定麻烦。...这种格式,或者yyyy年MM月dd日这种,再或者更加友好一点,根据时间段,转成1小时前、2天前、一周前这种,在实际开发中都是常有的情况,在Java中我们可以很方便getter方法中做这些处理,但是kotlin...getter方法都是内部封装,并不直接支持重写,我看到网上有些答案是像这样处理: data class OrderBean(val _createTime: Long){ val createTime...正确姿势 有以下三种,你可以根据自己业务逻辑团队的话语权进行选择: 让后端改:如果有可能的话,这是最合理,最恰当方式,后端直接返回我们需要字段形式,节省了移动端,web端,小程序端等每端各写一套逻辑时间...不用data class,使用常规class:不要拘泥于建议,谁说这些数据实体类就必须要用data class使用IDE去自动生成,照样可以,而且还实现了自己完全控制。

    4K10

    为什么要用GetterSetter方法,而不是公开属性

    大多数字段访问都是通过GetterSetter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者未来可能性。...我了解到,通过公共访问修饰符,类一个字段对于任何包都是可访问,并且使用getter/setter,我实际上正在做相同事情——使字段私有化,而getter/setter方法是公共,因此它可以被任何包访问...那么,下面属性namevalue区别是什么呢? ? 慢慢地,我意识到了为什么我们使用GetterSetter,以及为什么它们是重要。...例如,可以将字段设置为空值,如果在另一个方法使用该字段,则该方法可能会因空指针异常而崩溃。 但是,如果你提供了一个GetterSetter,你可以在完全控制同时提供间接访问。...设置值惟一方法是通过Setter,通过Getter获得值,所以现在字段只有一个入口一个出口点,因为GetterSetter是允许代码块方法,所以可以对它们进行验证检查!

    2.2K10

    【Kotlin】类初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter setter 方法 | 手动设置成员 getter setter 方法 | 计算属性 )

    文章目录 一、Kotlin 自动为成员字段生成 getter setter 方法 二、手动设置成员 getter setter 方法 三、计算属性 一、Kotlin 自动为成员字段生成 getter...Java 代码中 , 存在 name age 成员 getter setter 函数 ; 调用 hello.name 方法 , 实际上调用是 hello.setName 方法 ; class...结果 如下 : 二、手动设置成员 getter setter 方法 ---- Kotlin 会为 类中每个 成员属性 生成一个 field , getter , setter ; field...用于存储 属性数据 , 是由 Kotlin 自动进行定义封装 , 只有在 getter setter 函数中才能调用 field ; 手动定义 getter setter 方法示例 : class...某个属性 是 通过计算得到 , 可以 在该属性 getter setter 方法中进行计算设置或获取结果 , 不使用 field 属性 ; 下面的 age 属性就是通过计算得到属性值 , 每次获取都是

    1.8K20

    寻找性能更优秀动态 Getter Setter 方案

    方案说明 就是用表达式编译一个 Action 作为 Setter,编译一个 Func 作为 Getter。...知识要点 使用表达式创建委托 泛型类静态字段是每个闭合类型独立,因此用于存储类型相关内容非常方便 实现代码 由于代码中混合使用 Switch 作为字典阴招,所以代码很长,此处不再罗列,仅给出链接...如果属性是明确,建议把字典中取出来委托保存在自己上下文,这可以明显省去查找消耗。 图表 从左往右分别是:直接读取属性、缓存委托、不缓存委托使用 PropertyInfo。...开发者也可以直接引用 Newbe.ObjectVisitor 包来使用已经封装好 ValueGetter ValueSetter。...0.1.4 发布,初始版本 使用样例 Newbe.ObjectVisitor 样例 1 番外分享 寻找性能更优秀动态 Getter Setter 方案 寻找性能更优秀不可变小字典 GitHub

    49700

    php 魔术方法使用说明

    一些在PHP魔术方法函数,在这里介绍一下:其实在一般应用中,我们都需要用到他们!! PHP5.0后,php面向对象提成更多方法,使得php更加强大!!...一些在PHP魔术方法函数,在这里介绍一下:其实在一般应用中,我们都需要用到他们!! 1.__construct() 当实例化一个对象时候,这个对象这个方法首先被调用。...对象模型 类名相同函数是类构造函数,那么如果我们同时定义构造函数__construct()方法的话,php5会默认调用构造函数而不会调用__construct()函数,所以__construct...__get() 当试图读取一个并不存在属性时候被调用。 如果试图读取一个对象并不存在属性时候,PHP就会给出错误信息。...当__construct以类名为函数名函数 同时存在时调用__construct,另一个不背调用。 类名为函数名函数为老版构造函数。 2.

    52931

    java里gettersetter作用区别是什么?

    java是典型面向对象编程语言,面向对象三个特性,继承性,多态性,封装性,主要和封装性考虑,类里面的变量不想设置成公共类型,但是还要给外部使用在这种实用场景下,从编程技巧上加上方法来获取或者设置参数值...,于是gettersetter使用上了。...增加两个方法保证了类结构完整性以及安全性还是非常合算做法,其实从框架上考虑增加这两个方法还能在实际编程过程中增加额外功能作用,现在就根据实际编程中经验做一些总结归纳: 1.可以通过setter方法检查下数据准确性...,比如是否越界之类异常等等 2.可以在setter方法里面加上一些功能函数,主要在限定一些条件如果数值达到一定范围之后就开始做某些动作,选择时机点正好在这个方法里面。...3.加入涉及到多线程操作,在setter方法里面正好做加锁操作,正好是一个恰当时机 4.由于是关键数值变化,在这两个方法中加上打印非常适合追踪数据变化,方便程序判断。

    1.7K30

    PHP魔术方法

    什么是魔术方法 ? PHP 魔术方法 官方文档 传送门 PHP 魔术方法是指 PHP 中以两个下划线 _ 开头方法 我们自己在定义类方法时不能使用魔术方法名称,除非是想使用魔术功能 2....PHP 魔术方法 序号 方法名 描述 1 __construct 构造方法,类被实例化时执行 2 __destruct 析构方法,对象被销毁时执行 3 __call 当对象调用一个不可访问方式时执行...4 __callStatic 以静态方式调用一个不可访问方式时执行 5 __get 读取不可访问或不存在属性时执行 6 __set 给不可访问或不存在属性赋值时执行 7 __isset 当对不可访问或不存在属性调用...isset() 或 empty() 时执行 8 __unset 当对不可访问或不存在属性调用 unset() 时执行 9 __sleep 当对象使用 serialize() 序列化时,会先调用该方法...10 __wakeup 当对象使用 unserialize() 反序列化时,会先调用该方法 11 __serialize() 12 __unserialize() 13 __toString()

    47030

    别再写gettersetter方法了,用Lombok来简化你代码吧

    ,ide会识别不到,会提示你gettersetter方法没有定义。...2.Setter注解 有些类不需要getter方法,那么我们可以单独使用setter注解来标识。...通过ide自动补全功能,可以看到为我们实现了getter方法 3.Getter注解 有些类只提供getter返回,不允许外部设置属性值,这时候可以使用getter注解。...通过反编译查看: 为我们创建了全参构造方法 5.NoArgsConstructor注解 如果我们使用了AllArgsConstructor注解,又想拥有一个无参构造方法,那就使用NoArgsConstructor...还有一点需要注意是,如果close方法抛出受检异常,在编译阶段会报错: 我们可以手动把这个异常抛出 通过反编译查看: 这个注解我个人是不太喜欢用,个人更推荐大家使用try-with-resources

    9910
    领券