2014-11-06 4 views
-1

Я все еще участвую в ООП. У меня есть одна проблема: использование ключевого слова, использующего в Getter и Setter. Основываясь на моем понимании о закрытом ключевом слове, он не может получить доступ извне класса. Вот фрагмент, который копирует из книги!Должен ли я использовать ключевое слово private или ключевое слово public в getter/setter?

<?php 
//GetSet.php 
class GetSet 
{ 
    private $dataWarehouse; 
    function __construct() 
    { 
     $this->setter(200); 
     $got= $this->getter(); 
     echo $got; 
    } 

    private function getter() 
    { 
     return $this->dataWarehouse; 
    } 

    private function setter($setValue) 
    { 
      $this->dataWarehouse=$setValue; 
    } 
} 

$worker=new GetSet(); 

?> 

Но я видел много, что с помощью общественного ключевого слова в Getter и Setter. Таким образом, в книге говорилось, что «если мы используем ключевое слово public в Getter и Setter, это может сломать концепцию инкапсуляции».

Мой вопрос «Должен ли я использовать общественного или личное ключевое слово в Getter и Setter? Или это основано на бизнес-требования?».

+0

Поскольку ваши функции getter и setter являются закрытыми, они не могут быть вызванным извне. Вероятно, поэтому вы не получаете выход. Однако эти функции могут быть частными в различных случаях, например. если есть общедоступная функция «сохранить», которая затем вызывает функцию private setter. – Paul

+1

Это зависит от того, для чего вы хотите его использовать. Если вы хотите использовать сеттер из-за пределов своего класса, частные не подходят. –

+0

Спасибо @Paul и Félix Gagnon-Grenier. Я ясно понимаю это. –

ответ

2

Если у вас есть достаточные методы получения и настройки для этой переменной, я бы сделал ее конфиденциальной, чтобы быть более безопасной.

This programmer's question также содержит некоторые другие практические аргументы в пользу использования частных переменных.

Доступ к общественному члену осуществляется за пределами класса, что для практических соображений означает «потенциально в любом месте». Если что-то пойдет не так с открытым полем, виновник может быть где угодно, и поэтому, чтобы отследить ошибку, вам, возможно, придется посмотреть довольно много кода.

Личный член, напротив, может быть доступен только из одного класса, поэтому, если что-то пойдет не так, обычно есть только один исходный файл. Если у вас миллион строк кода в вашем проекте, но ваши классы невелики, это может уменьшить ваши усилия по отслеживанию ошибок в 1000 раз.

Смежные вопросы