PHP, как мы все знаем, очень слабо напечатан. Язык не требует указывать какой-либо тип для параметров функции или переменных класса. Это может быть мощной функцией.
Иногда, однако, это может сделать отладку вашего скрипта болезненным процессом. Например, передача объекта одного типа в метод, который ожидает объект другого типа, может привести к появлению сообщений об ошибках, сообщающих, что для переданного объекта не существует определенной переменной / метода. Эти ситуации в основном раздражают. Более обременительные проблемы возникают, когда вы инициализируете один объект объектом неправильного класса, и этот «неправильный объект» не будет использоваться до тех пор, пока не будет выполнен сценарий. В этом случае вы получите ошибку намного позже, чем когда вы передали исходный аргумент.
Вместо того, чтобы жаловаться, что у того, что я передал, нет определенного метода или переменной, или ждать намного позже выполнения сценария для использования моего переданного объекта, Я бы предпочел ошибку сообщение, где именно я указываю объект неправильного типа, с жалобой на неправильный или несовместимый тип объекта.
Как вы справляетесь с этими ситуациями в своем коде? Как вы обнаруживаете несовместимые типы? Как я могу ввести некоторые проверки типов в свои сценарии, чтобы я мог получить более понятные сообщения об ошибках?
Кроме того, как вы можете делать все это при учете наследования в Php? Рассмотрим:
<?php
class InterfaceClass
{
#...
}
class UsesInterfaceClass
{
function SetObject(&$obj)
{
// What do I put here to make sure that $obj either
// is of type InterfaceObject or inherits from it
}
}
?>
Затем пользователь этого кода реализует интерфейс со своим собственным конкретным классом:
<?php
class ConcreteClass extends InterfaceClass
{
}
?>
Я хочу, чтобы экземпляры ConcreteClass и все будущие неизвестные пользовательские объекты также были приемлемы для SetObject. Как бы вы сделали это допустимым при проверке правильности типа?