Недавно я работал с другим кодом, и я понял, что у этого человека есть совсем другая философия относительно частных переменных и параметров метода, чем у меня. Обычно я считаю, что частные переменные следует использовать только в случае, когда:
- Переменная должна быть сохранена для последующего вызова.
- Данные, хранящиеся в переменной, используются глобально в классе.
- Когда переменная должна управляться глобально (что-то решительно отличается от необходимости читать переменную каждым методом класса).
- Когда это упростит программирование. (По общему признанию, расплывчатый, но нужно во многих случаях избегать рисования себя в угол).
(Я признаю, что многие из перечисленных выше немного повторяются, но каждый из них кажутся достаточно разными, чтобы заслужить такое лечение...)
Просто кажется, что это наиболее эффективное средство предотвращения случайного изменения переменной. Похоже, что последующие эти стандарты позволят в конечном счете манипулировать внешними ссылками (если класс в конечном итоге изменен), таким образом оставляя вас в будущем. Это просто проблема стиля (например, одна настоящая скобка или венгерские соглашения об именах), или у меня есть оправдание в этом убеждении? Действительно ли в этом случае лучшая практика?
изменить
Я думаю, что это нужно исправить. Я использовал "глобально" выше, где я на самом деле имел в виду "глобально методом экземпляра", а не "глобально доступным никем и нигде".
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;
}
}