Как правильно указать типа параметр при имплементации интерфейса в PHP? Задался вопросом почему объект класса не совместим с типом object. Пример ниже:interface ExtractorInterface
{
/**
* @param object $object
* @return array
*/
public function extract(object $object);
}
class MyObjectExtractor implements ExtractorInterface
{
/**
* @param MyObject $object
* @return array
*/
public function extract(MyObject $object)
{
return [
'a' => $object->a,
];
}
}
class MyObject
{
public $a;
}
Есть вариант не указывать тип и делать проверку внутри метода. Ещё менее надежный метод не указывать тип вообще.
Как правильно использовать типизацию? Или может быть не использовать?

21 Авг 2019 в 06:59
165 +1
0
Ответы
1

В данном случае, вы можете использовать интерфейс для типизации параметра, чтобы объект класса, который вы используете для имплементации интерфейса, соответствовал типу параметра, указанному в интерфейсе.

Измените интерфейс ExtractorInterface следующим образом:

interface ExtractorInterface
{
/**
* @param MyObject $object
* @return array
*/
public function extract(MyObject $object);
}

Теперь, когда вы имплементируете интерфейс в классе MyObjectExtractor, вы можете использовать тип MyObject для параметра метода extract:

class MyObjectExtractor implements ExtractorInterface
{
/**
* @param MyObject $object
* @return array
*/
public function extract(MyObject $object)
{
return [
'a' => $object->a,
];
}
}

Таким образом, при использовании интерфейса и правильной типизации параметров, вы сможете убедиться, что объект, переданный в метод, соответствует ожидаемому типу, что делает код более надежным и предсказуемым.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир