Объекты не являются «специальными» объектами с точки зрения PHP.
Вы можете подойти к этому двумя способами
- Определите общий интерфейс (возможно, без каких-либо методов), напишите его и пусть все сущности реализуют это
- Используйте тип
object
для ввода текста, который был введен в PHP 7.2
С первым решением вы в безопасности, если кто-то пытается передать что-то, что не является реализацией этого интерфейса . Конечно, вы должны помнить, что каждый раз, когда в кодовой базе создается новый объект, он должен реализовывать этот интерфейс.
Со вторым решением вы не в безопасности, как в первом пункте, но при этом уверены, что все, что передано, не является скалярным или примитивным типом
С первым решением вы в итоге напишите что-то вроде
interface Entity { }
class FooEntity implements Entity { }
class BarEntity implements Entity { }
...
public function serialize(Entity $entity) { }
Со вторым решением просто
public function serialize(object $entity) { }
Первое решение рекомендуется, если вам нужно разрешить только такого рода сущностей, тогда как второе более разрешающее: оба они хороши для меня, но вы должны сосредоточиться на том, каковы правила для вашего кода
Редактировать
Я видел другие ответы, предлагающие расширить, а не реализовывать интерфейс: пожалуйста, не расширяйте его из суперкласса, если это не является строго необходимым, поскольку классы PHP могут расширяться только из одного класса, тогда как они могут реализовывать несколько интерфейсов. Интерфейс - это то, что нужно, если вам нужно первое решение, иначе у вас будут проблемы, если вам понадобится расширение real , наложенное моделью