我最近一直在使用其他人的代码,我意识到这个人对私有变量和方法参数的理念与我的不同.我一般认为私有变量只应在以下情况下使用:
需要存储变量以便以后调用.
存储在变量中的数据在类中全局使用.
当需要对变量进行全局操作时(与每个类方法读取变量的需求明显不同).
什么时候会使编程变得更容易.(不可否认,但在许多情况下必须避免将自己画成一个角落).
(我承认,上面的许多都是轻微的重复,但它们看起来各不相同,值得这样的处理......)
这似乎是防止意外更改变量的最有效方法.似乎遵循这些标准将允许最终操纵外部引用(如果类最终被修改),从而在将来为您留下更多选项.这只是一个风格问题(如一个真正的括号或匈牙利命名惯例),还是我有这种信念的理由?在这种情况下,实际上是否有最佳做法?
编辑
我认为这需要纠正.我使用上面"全局"的实际意思,"全局实例方法"并非"任何地方都可以全球访问".
edit2
一个例子被要求:
class foo { private $_my_private_variable; public function __constructor__() { } public function useFoo( $variable ) { // This is the line I am wondering about, // there does not seem to be a need for storing it. $this->_my_private_variable = $variable; $this->_doSometing(); } private function _doSomething() { /* do something with $this->_my_private_variable. */ // This is the only place _my_private_variable is used. echo $this->_my_private_variable; } }
这就是我做的方式:
class foo { public function __constructor__() { } public function useFoo( $variable ) { $this->_doSometing( $variable ); } private function _doSomething( $passed_variable ) { /* do something with the parameter. */ echo $passed_variable; } }
Michael Burr.. 32
通常,类成员应表示类对象的状态.
它们不是方法参数的临时位置(这是方法参数的用途).
通常,类成员应表示类对象的状态.
它们不是方法参数的临时位置(这是方法参数的用途).
我声称它不是样式问题,而是可读性/可维护性问题.一个变量应该有一个使用,一个只使用."回收"变量仅仅因为碰巧需要相同类型而出于不同目的没有任何意义.
从您的描述中可以看出,您所处理的其他人的代码就是这样,因为所有其他用途基本上都在您的列表中.简而言之,它根据情况使用私有成员变量作为临时变量.我是正确的假设吗?如果是这样,代码是可怕的.
任何给定变量的词法范围和寿命越小,错误使用的可能性越小,资源处理越好.
拥有一个成员变量意味着它将保持需要在方法调用之间保持的状态.如果值不需要在调用之间存在,则它没有理由存在于单个调用的范围之外,因此(如果存在的话)应该是方法本身内的变量.
风格永远是一个艰难的风格,一旦你开发出一个你可能会陷入困境,很难看出为什么你做的可能不是最好的方式.