Краткий ответ: вы не можете создать в PHP переменную-член, доступную только для чтения.
Фактически, большинство объектно-ориентированных языков считают плохой формой публичное раскрытие переменных-членов в любом случае ... (C # - большое, безобразное исключение с его конструкциями свойств).
Если вы хотите переменную класса, используйте ключевое слово const
:
class MyClass {
public const myVariable = 'x';
}
Доступ к этой переменной:
echo MyClass::myVariable;
Эта переменная будет существовать ровно в одной версии, независимо от того, сколько различных объектов типа MyClass
вы создаете, и в большинстве объектно-ориентированных сценариев она практически не используется.
Если, однако, вам нужна переменная только для чтения, которая может иметь разные значения для каждого объекта, вы должны использовать закрытую переменную-член и метод доступа (a k a getter):
class MyClass {
private $myVariable;
public function getMyVariable() {
return $this->myVariable;
}
public function __construct($myVar) {
$this->myVariable = $myVar;
}
}
Переменная устанавливается в конструкторе, и она становится доступной только для чтения, поскольку не имеет установщика. Но каждый экземпляр MyClass
может иметь свое значение для myVariable
.
$a = new MyClass(1);
$b = new MyClass(2);
echo $a->getMyVariable(); // 1
echo $b->getMyVariable(); // 2
$a->setMyVariable(3); // causes an error - the method doesn't exist
$a->myVariable = 3; // also error - the variable is private