众所周知,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 接受。您如何在检查正确类型时允许这样做?