TGViewer
The Fly's PHP - Делаем из Мухи Слона The Fly's PHP - Делаем из Мухи Слона @flyphp · 414 subscribers
Post #63 563
Как отлично заметил Кирилл в комментариях к предыдущим постам, что:

Чтобы устранить необходимость в геттерах и сеттерах, интерфейс должен иметь возможность указать, какие свойства он включает и таким образом в довесок к тому изначально чего он был создан этот RFC также добавляет возможность для интерфейсов асимметрично объявлять публичные свойства. Класс реализации может предоставить свойство как через обычное свойство так и через хук. Любого способа из них достаточно для удовлетворения интерфейса.

Рассмотрим сначала за пример код указанный в RFC:
interface I
{
// Класс, реализующий интерфейс ДОЛЖЕН иметь публичное свойство,
// но независимо от того, является ли оно публичным или нет - ограничений нет.
public string $readable { get; }

// Класс реализации ДОЛЖЕН иметь публичное свойство для записи,
// но независимо от того, доступно ли оно публичному чтению или нет - ограничений нет.
public string $writeable { set; }

// Класс реализации ДОЛЖЕН иметь свойство, которое является публичным и
// доступно для чтения и записи.
public string $both { get; set; }
}

ну и что-нибудь такое из примеров предыдущих постов:
interface User
{
// Объекты, реализующие этот интерфейс, ДОЛЖНЫ иметь возможность
// получить свойство $fullName. Этого можно добиться обычным
// свойством или свойство с хуком get.
public string $fullName { get; }
}

class Customer implements User
{
// Хук get необязателен,
// свойство будет доступно для чтения даже без хука get.
public function __construct(public string $fullName) {}
}

свойство $fullName будет прекрасно читаться и без хука get. Но если мы определим хук get для свойства, оно будет доступно для чтения именно с помощью хука get.

Интерфейсы могут быть связаны только с публичным доступом, поэтому наличие приватных свойств не зависит от интерфейса и не может удовлетворить интерфейс. Это та же самая логика, что и для методов. Ключевое слово public свойства необходимо для обеспечения согласованности синтаксиса (или его редко используемый псевдоним var).

Следует отметить, что свойство интерфейса, которое требует только хук get может удовлетворяться общедоступным readonly свойством, поскольку ограничения readonly применяются только при записи. Однако свойство интерфейса, которое требует хук set несовместимо с readonly свойством, поскольку публичная запись будет запрещена.
  • ❤ 2
  • 👍 2
More from @flyphp
  1. Sep 10, 2026🐘 Пыхник’26 - целая неделя PHP! С 28 сентября по 2 октября собираемся на Пыхнике’26 - онл…
  2. Sep 10, 2026Post #105
  3. Jul 8, 2026Первый официальный State of PHP опрос открыт: https://jb.gg/php-survey-2026 В сообществе у…
  4. Jun 2, 2026Вышел TrueAsync 0.7.0, краеугольная версия, которая определяет необходимый API для асинхро…
  5. May 23, 2026В конце 2025 года проводился ежегодный опрос русскоязычного PHP-сообщества. Результаты опр…
  6. Jan 15, 2026🚀 Большой ежегодный опрос по PHP 🐘 🤘 Присоединяйся и помогай комьюнити становиться толь…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →