PHP-намеки - программирование
Подтвердить что ты не робот

PHP-намеки

У меня есть черта. Ради творчества, давайте назовем эту черту Черта:

trait Trait{    
    static function treat($instance){    
        // treat that trait instance with care
    }
}

Теперь у меня также есть класс, который использует эту черту, Пользователь. При попытке вызова лечения с экземпляром пользователя все работает. Но я хотел бы напомнить нам, что в качестве аргументов должны быть указаны только экземпляры классов, использующих Trait:

static function treat(Trait $instance){...}

К сожалению, это приводит к фатальной ошибке, которая говорит о том, что функция ожидала экземпляр Trait, но был предоставлен экземпляр User. Этот тип подсказок по типу отлично работает для наследования и реализации, но как я могу подсказать характерную подсказку?

4b9b3361

Ответ 1

Вы не можете, как говорит DaveRandom. И вы не должны. Вероятно, вы захотите реализовать интерфейс и typehint. Затем вы можете реализовать этот интерфейс, используя признак.

Ответ 2

Для людей, которые окажутся здесь в будущем, я бы хотел остановиться на ответе Веды.

  1. Это правда, что вы не можете рассматривать черты как черты в PHP (как ни странно), говоря, что вы ожидаете, что объект, имеющий некоторые черты, возможен только через интерфейсы (по сути, набор абстрактных черт)
  2. Другие языки (такие как Rust) на самом деле поощряют намеки шрифтов с чертами

В заключение; твоя идея не сумасшедшая! На самом деле имеет смысл рассматривать черты такими, какими они являются в общем смысле этого слова, и другие языки делают это. Похоже, PHP почему-то застрял в середине между интерфейсами и особенностями.