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