在php中使用访问器方法与公共变量的权衡是什么

Yeh*_*sef 0 php variables public accessor

我正在寻找有关在php中使用公共变量与私有变量和访问器方法的建议/经验.

例如$ obj-> foo ='a'; echo $ obj-> foo;

vs $ obj-> setFoo('a'); echo $ obj-> getFoo();

我喜欢公共变量的是较短的语法 - 似乎使用的工作量较少.我明白以后可能会使重构变得更加困难,但我从未体验过它(意思是,有时候设计会发生变化 - 但通常需要更改访问器方法.)

另一种选择是将变量存储在一个数组中并使用魔术方法(__get/__ set)来访问它们 - 然后我可以轻松使用具有重构或访问方法的公共变量.

任何人们在php世界中所做的经验或参考.

对于任何持有访问器方法的人来说,最好的方法是,公共变量是否有效?

Mar*_*ker 7

是的,访问器方法是一种开销,虽然使用setter/getters的语法与直接访问公共属性一样干净......稍微冗长,但同样干净.

访问器方法的最大好处是,您可以使用set方法验证值并拒绝不适当的值(例如,尝试设置应始终为字符串或数组的整数的属性)...但此验证仅在外部有效代码无法直接访问该属性.

第二个好处,如果您的代码具有相关属性,其中对属性A的更改也需要更改属性B ...如果属性是公共的,则无法控制(或强制执行)此属性.

使用set方法可以实现流畅的界面,或者实现更清晰的代码,例如:

echo $obj->setFoo('a');
Run Code Online (Sandbox Code Playgroud)

代替

$obj->setFoo('a'); echo $obj->getFoo();
Run Code Online (Sandbox Code Playgroud)

如果在set方法中包含一个return