草庐IT

Getters-Setter

全部标签

php - 直接调用变量属性与 getter/setter - OOP 设计

我知道这可能是主观的,但我读过这个optimizationpagefromGoogleforPHP他们建议直接使用变量属性而不需要getter和setter。可以理解,我看到了这样做的性能提升,但这真的是一个值得遵循的好设计实践吗?他们使用getter/setter的例子:classdog{public$name='';publicfunctionsetName($name){$this->name=$name;}publicfunctiongetName(){return$this->name;}}$rover=newdog();$rover->setName('rover');ec

php - 为什么要在 setter 方法中返回 $this?

检查ZendFramework,我发现所有setter方法(在我检查过的方法中)都返回它所在的类的实例。它不仅设置一个值,还返回$this。例如:/*Zend_Controller_Router*/publicfunctionsetGlobalParam($name,$value){$this->_globalParams[$name]=$value;return$this;}/*Zend_Controller_Request*/publicfunctionsetBaseUrl($baseUrl=null){//...somecodehere...$this->_baseUrl=rtr

php - 独立的 getter/setter 方法,还是组合?

在处理项目时,我一直在进行一些更改并浏览现有框架API文档以获取见解。在仔细阅读Kohana文档时,我注意到任何给定类的getter/setter通常是组合在一起的:publicfunctionsomeProperty($value=null){if(is_null($value){return$this->_someProperty;}$this->_someProperty=$value;return$this;}而不是:publicfunctionsetSomeProperty($value){$this->_someProperty=$value;return$this;}pu

c++11 - 所有权和 setter/getter

我是C++新手,我很难理解所有权,特别是使用getter。下面是一些示例代码:classGameObject{public:Transform*transform();private:Transform_transform;};我猜原始指针是不安全的,因为当对象不再存在时有人可以访问它?所以我考虑为变换成员使用unique_ptr,因为GameObject是唯一拥有变换的对象。但是我不能从setter/getter那里返回它,可以吗?但是话又说回来,为什么我会首先使用unique_ptr而不是像上面那样将其添加为成员?那么为什么不使用shared_ptr呢?这对我来说似乎是错误的,我不

c++ - 完美转发 setter 的正确 `enable_if` 约束是什么?

HerbSutter的回归基础!CppCon上的现代C++基础介绍讨论了传递参数的不同选项,并比较了它们的性能与编写/教学的难易程度。“高级”选项(在所有测试的情况下提供最佳性能,但对于大多数开发人员来说太难编写)是完美的转发,给出的示例(PDF,pg.28):classemployee{std::stringname_;public:template,std::string>::value>>voidset_name(String&&name)noexcept(std::is_nothrow_assignable::value){name_=std::forward(name);}}

c++ - 可以放弃简单类的 getter 和 setter 吗?

我正在制作一个非常简单的类来表示3D空间中的位置。目前,我只是让用户直接访问和修改单个X、Y和Z值。换句话说,它们是公共(public)成员变量。templatestructPosition{NumericTypeX,Y,Z;//Constructors,operatorsandstuff...};这背后的原因是,因为NumericType是一个模板参数,所以我不能依赖一种体面的方法来检查值的健全性。(我怎么知道用户不想用负值来表示位置?)因此,添加getter或setter来使界面复杂化是没有意义的,直接访问应该更简洁。Pos.X=Pos.Y+Pos.Z;//Versus...Pos

带有 getter 和 setter 的 JavaScript 类导致 RangeError : Maximum call stack size exceeded

我目前正在试验ECMA6类。我当前的类(class)如下所示classPlayer{constructor(id){this.id=id;this.cash=350;}getcash(){returnthis.cash;}setcash(value){//line19this.cash=value;//line20}};当我现在通过调用letplayerObject=newPlayer(1);创建一个新对象时,我收到以下错误...\node_modules\mysql\lib\protocol\Parser.js:82throwerr;^RangeError:Maximumcallst

python - Pycharm (@property) 和 (@x.setter) 自动生成

我想知道是否有某种方法可以使用Pycharm为类中的所有变量自动生成getter(@property)或setter。如果有办法,谁能指出来?谢谢!其实我的意思是自动生成(@property)和(@x.setter)。 最佳答案 没有办法这样做。您可以提取代码的某些部分,但不能让pycharm为您生成getter和setter。也没有必要,因为所有变量都是公共(public)的,并且_var值,即使被视为私有(private)变量也可以更改。编辑(有问题的更改):如果您想在制作getter和setter时编写更少的代码,那么只需使用

python - OOP:getter/setter 方法

这个问题在这里已经有了答案:What'sthepythonicwaytousegettersandsetters?(8个回答)关闭6年前。所以我读到你应该通过像object.get_this()或object.set_that(value)这样的getter/setter方法来访问对象属性。此代码是否适用于类中定义的方法?或者它们仅用于对象实例。例如,这样做是否符合习惯,classtest:def__init__(self,value):self.value=valuedefget_value(self):returnself.valuedefmethod(self):returnso

Python覆盖没有setter的getter

classhuman(object):def__init__(self,name=''):self.name=name@propertydefname(self):returnself._name@name.setterdefname(self,value):self._name=valueclasssuperhuman(human):@propertydefname(self):return'super'+names=superhuman('john')prints.name#Doesn'twork:("AttributeError:can'tsetattribute"s.name=