свойства php obj accessilibty, недоступные для записи вне класса, но читаемые вне класса

#php

#php

Вопрос:

Я не хочу делать свойства class example доступными только для его дочерних элементов, но я хочу, чтобы дочерние элементы могли изменять их отдельно от начальной __конструкции. Вот как у меня все настроено на данный момент. Могу ли я сделать это лучшим способом?

 class example{
    private $x
    protected function __construct($x){
        setX($x);
    }
    private function setX($x){
        $this->x = $x;
    }
    protected function getX{
        return $this->x;
    }
}
  

Комментарии:

1. Не уверен, что понимаю, вы хотите, чтобы подкласс получал доступ к значению свойства, но не мог их устанавливать, за исключением конструктора? Если это так, то это лучший способ (хотя вы, вероятно, хотите, чтобы ваш конструктор был общедоступным, верно?) — путем переопределения метода конструктора.

2. Я хочу, чтобы мой конструктор был доступен только через подклассы, и в этом случае установка его как общедоступного была бы доступна для thing.

Ответ №1:

Правильно ли я понимаю, что вы хотите, чтобы $ x был доступен для чтения (но не редактировался) только его дочерними элементами?

Тогда да, ваше определение класса выглядит нормально (хотя и с синтаксическими ошибками).

Дочерние элементы не могут получить доступ к закрытым элементам, только к защищенным (и общедоступным, durhur).

Ответ №2:

Вы имеете в виду, что хотите использовать этот метод получения / установки вне функции, вот так?

 $a = new Example(5);
$a->setX(25);

echo $a->getX();
  

Если да, вам нужно присвоить им двум общедоступные функции:

 class Example{
    private $x
    protected function __construct($x){
        setX($x);
    }
    public function setX($x){
        $this->x = $x;
    }
    public function getX{
        return $this->x;
    }
}
  

PS.: Хорошей практикой является использование заглавных букв в именах ваших классов.

Комментарии:

1. Я хочу, чтобы средства получения / установки использовались только внутри подклассов, так что не будет ли защищен путем перехода?