首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >关于对getter和setter使用魔术有什么一般的建议?

关于对getter和setter使用魔术有什么一般的建议?
EN

Stack Overflow用户
提问于 2011-09-07 09:41:52
回答 4查看 238关注 0票数 2

我来自强类型语言,对PHP中神奇的getter和setter方法感到不舒服。将它们实现到语言中的动机是什么?关于使用它们的一般建议是什么?

编辑:

我大体上理解使用getter和setter背后的动机。我感兴趣的是使用神奇的getter和setter方法(相对于setProperty($property)getProperty()方法)背后的动机。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-07 11:26:00

我认为PHP神奇的getter和setter是它的病症之一。

当程序员需要处理代码中的字符串时,他和他的团队开始犯错误……(这是y,我认为你应该尽量避免使用assoc数组……它不安全)

集成开发环境

当您在编辑器中输入$a->get时,您会得到一个getter列表,并且您不需要记住类成员的确切大小写。如果程序员的生活不容易,那么应用程序也不容易。

编程

在大多数语言中,getter和setter实际上是一个函数,你可以在其中添加一些小逻辑,这在PHP中做得并不明智。

开销

每个PHP魔术函数都有一些性能问题。

这是我的意见..。

票数 0
EN

Stack Overflow用户

发布于 2011-09-07 11:13:39

实现__get()和__set()背后的动机是什么

PHP的神奇方法__get()和__set()也被称为“重载”方法。从PHP manual

PHP对“重载”的解释与大多数面向对象语言不同。传统上,重载提供了具有相同名称但不同数量和类型的参数的多个方法的能力。

其中,作为:

中的重载提供了动态“创建”属性和方法的方法。这些动态实体是通过魔术方法处理的,可以在一个类中为各种动作类型建立这些方法。

基本上,引入__get()__set()__call()是为了根据重载的定义提供重载功能。

关于使用它们的一般建议是什么?

这是一个负载很大的问题,因为不同的人可能有不同的观点。也就是说,它们可以用来:

创建一个属性read-only

  • validate

  • the stored/retrieved.

  • change the interface (例如,$object->method($data)变为$object->data)

)

这些只是几个例子。您可能会发现Best Practices for __get() and __set()很有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7331740

复制
相关文章
Java Getter和Setter
Author:杭州电子科技大学 2016级管理学院 工商管理 唐涛 16011324@hdu.edu.cn
用户3906512
2019/10/05
7K2
getter和setter怎么用_python setter
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/14
3890
计算属性的setter和getter
        刚才通过计算lastName和firstName获取了整个姓名,当时我们只是通过一直的data对象中属性进行合成的,这个也就是计算属性(computed)的get方法(默认),实质上还有一个set方法,我们来看一下getter和setter;
十月梦想
2018/10/09
1.2K0
Vue引发的getter和setter
看着文档研究了一下vue的双向数据绑定,打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vue
李文杨
2018/03/14
1.6K0
Vue引发的getter和setter
Getter & Setter:使用还是废弃
私有变量 为什么我们要使用私有的实例变量呢? 因为我们不希望其他类直接的依赖于这些变量。而且在心血来潮时,我们还可以灵活的修改变量类型和实现。 然而,为什么程序员们都自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样? 存取方法 存取方法(又被称为getters和setters)是一些可以用来读写对象实例变量值的方法。 为什么使用存取方法? 在类中使用存取方法而非直接暴露属性是有理由的。 Getter和Setter使得API更加的稳定。 比如,假设类中有一个
java思维导图
2018/03/15
1.3K0
Getter & Setter:使用还是废弃
getter与setter
getter是一个获取某个属性的值的方法,setter是一个设定某个属性的值的方法。
WindRunnerMax
2020/08/27
7480
盘点JavaScript中getter()和setter()函数的使用
第一种是 数据属性。已经知道如何使用它们了。到目前为止,使用过的所有属性都是数据属性。
前端进阶者
2021/09/10
1.7K0
盘点JavaScript中getter()和setter()函数的使用
js对象属性的getter和setter
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/53996012
空空云
2018/09/27
3.2K0
java里getter和setter的作用和区别是什么?
java是典型的面向对象的编程语言,面向对象三个特性,继承性,多态性,封装性,主要和封装性考虑,类里面的变量不想设置成公共的类型,但是还要给外部使用在这种实用场景下,从编程技巧上加上方法来获取或者设置参数值,于是getter和setter就使用上了。
程序员互动联盟
2019/07/19
1.8K0
TW洞见〡getter和setter的那些事
文章作者来自ThoughtWorks:佟达 相信每一个以Java或者C++作为编程入门语言的程序员,一定会记得一条金科玉律:字段(Filed)要声明成private,如果要读取或修改字段,就声明一些公
ThoughtWorks
2018/04/16
9020
TW洞见〡getter和setter的那些事
vue之计算属性的setter和getter
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <h2>{{fullName}}</h2> </div> <script src="../js/vue.js"></script> <script> const app = new Vue({
兮动人
2021/06/11
8390
vue之计算属性的setter和getter
通过getter和setter方法访问和修改
2.setter方法可以执行错误检查,比如检查数据是否合乎规范,输入的age是否小于0,直接对域操作则没这种优势
用户7999227
2021/10/08
9880
为什么要用Getter和Setter方法,而不是公开属性
大多数字段的访问都是通过Getter和Setter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者的未来可能性。当我在Java语言编程中开始我的职业生涯时,我就对Getter和Setter感到困惑。为什么要这么写呢?为什么不直接用Public呢?这对我来说是个奇怪的语法。
三哥
2018/12/17
2.2K1
为什么要用Getter和Setter方法,而不是公开属性
通过getter获取setter函数
放在:https://gitee.com/dromara/stream-query
阿超
2023/06/23
1460
为什么不需要为Python对象添加 getter 和 setter
Getter 和 setter在java中被广泛使用。一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和setter函数以供外部使用。 这样做的好处是属性的具体实现被隐藏,当未来需要修改时,只需要修改getter 和 setter即可,而不用修改代码中所有引用这个属性的地方。可能做的修改为: 在获取或设置属性时打一条日志 设置属性时,对值对进检查 设置发生时, 修改设置的值 获取属性时,动态地计算值 可谓是好处多多,getter和setter为变量访问提供了灵活的方式。 但pyt
用户2176428
2018/06/27
1.3K0
Groovy 创建索引属性Getter和Setter方法
在Groovy中,我们可以在类中定义属性,并自动在类文件中生成这些属性的getter和setter方法。 如果我们有一个Collection类型属性,我们通常会获得此属性的get/set方法。 但是根据JavaBean规范,我们可以将Collection类型属性定义为索引属性。 这意味着我们需要一个带索引参数的额外get/set方法,因此我们可以直接在属性中设置元素的值:
白石
2019/09/18
2K0
寻找性能更优秀的动态 Getter 和 Setter 方案
反射获取 PropertyInfo 可以对对象的属性值进行读取或者写入,但是这样性能不好。所以,我们需要更快的方案。
newbe36524
2020/11/08
5050
寻找性能更优秀的动态 Getter 和 Setter 方案
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
创建标准的 Java 类 , 需要将成员变量设置为私有成员 , 并且为其定义 getter 和 setter 方法 ;
韩曙亮
2023/03/30
1.2K0
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
点击加载更多

相似问题

普通和魔术setter和getter之间的区别

42

关于Getter和Setter的困惑

11

对getter和setter使用支持变量

60

何时对属性使用getter和setter?

40

对setter和getter的怀疑

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文