Нет, это не так, поскольку значение устанавливается только в конструкторе и никогда не изменяется после этого.Так что это соответствует определению неизменности.Я бы переименовал $mutable
в $isCreated
или что-то еще, потому что вы не можете изменить изменяемое свойство класса с этим свойством, по моему мнению, оно неверно названо.
Однако на некотором уровне неизменность объекта в PHP вообще невозможна, поскольку:
Неизменяемость не означает, что объект, сохраненный в памяти компьютера, не записывается.Скорее неизменяемость - это конструкция времени компиляции, которая указывает, что программист может делать через обычный интерфейс объекта, а не обязательно то, что он может абсолютно
(Источник: Википедия )
Поскольку в PHP нет «времени компиляции» и свойство $mutable
оценивается во время выполнения, может показаться, что это нарушает эту концепцию с самого начала.
На другом уровне, используя ту же цитату, «нормальный интерфейс» будет тем, что представляет ваш первый пример.Вызов метода-конструктора напрямую, а не через new
, полностью выходит за рамки обычного использования.Итак, вы могли бы сказать, что класс без установщиков его свойств уже неизменен по соглашению «через обычный интерфейс».
По сути, вы задаете академический вопрос, но пытаетесь решить реальный мирВопрос об абсолютной уверенности в том, что свойства объекта не могут быть изменены ни при каких обстоятельствах после создания экземпляра.Но тогда понятие «неизменность» не применимо.