Классы только для чтения
Классы только для чтения
Начиная с php8.2 классы можно пометить модификатором readonly, что добавит readonly к каждому объявленному свойству и не разрешит создавать динамические свойства
readonly class Foo {}
В классах только для чтения нельзя объявлять нетипизированные и статические свойства, поскольку такие свойства нельзя помечать модификатором readonly
Чтобы создать экземпляр класса, который определили в пространстве имён, требуется указывать абсолютное имя класса
Пример новых объектов, которые создали через произвольные выражения
Пример показывает варианты допустимых произвольных выражений, которые представляют имя класса. Пример вызова функции, конкатенации строк и константы ::class
Источник: https://www.php.net/manual/ru/language.oop5.basic.php
class ClassA extends \stdClass {}
class ClassB extends \stdClass {}
class ClassC extends ClassB {}
class ClassD extends ClassA {}
function getSomeClass(): string
{
return 'ClassA';
}
echo getSomeClass();
echo "<br>";
var_dump(new (getSomeClass()));
echo "<br>";
var_dump(new ('Class' . 'B'));
echo "<br>";
var_dump(new ('Class' . 'C'));
echo "<br>";
#SomeClass::class вернет полное имя SomeClass включая пространство имен. Эта функция была реализована в PHP 5.5
var_dump(new (ClassD::class));
Источники
Связанные темы
Оператор разрешения видимости в php
Позднее статическое связывание
Методы создания экземпляра класса в php
Автоматическая загрузка классов
Наследование с помощью extends в php
Конструкторы и деструкторы в php