从PHP的角度将对象转换为其接口


Casting object to its interface from a point of view of PHP

我正试图(出于教育原因)将Java代码重写为PHP。它在这个存储库中。我的问题是42号线。我们可以在那里看到以下代码:

if (this.getBoard().getTile(boxNextPlace) instanceof ContentOperations && 
    ((ContentOperations)this.getBoard().getTile(boxNextPlace)).getContent() == null)
{
    ...

作为第一步,我们检查this.getBoard().getTile(boxNextPlace)是否返回实现ContentOperations接口的对象。如果是,我们进入第二步,再次调用this.getBoard().getTile(boxNextPlace)链,但这次我们将返回值强制转换为ContentOperations,然后调用getContent方法进行进一步处理(在本例中,将其与null、.getContent()==null进行比较,但这与我的问题无关)。

据我所知,在这种情况下,强制转换是一种保护,可以防止调用对象未实现的方法,但this.getBoard().getTile(boxNextPlace) instanceof ContentOperations条件已经证明了这一点,即对象是ContentOperations类型的。

所以问题是:如果一个对象被证明是所需的类型,为什么将它强制转换到它的接口是必要的?或者也许我对铸件这种保护功能的理解是错误的?

编写Java代码的人在第42行进行了instanceof检查,但他们忽略了在第55行再次进行检查。如果getTile()真的可以返回一个不是ContentOperations的对象,那么就会出现ClassCastException。我假设您不需要PHP中的任何额外逻辑来解释不同的返回类型。