键入提示通用对象

由于 PHP 对象不从任何基类继承(包括 stdClass),因此不支持提示通用对象类型的类型。

例如,以下内容不起作用。

<?php

function doSomething(object $obj) {
    return $obj;
}

class ClassOne {}
class ClassTwo {}

$classOne= new ClassOne();
$classTwo= new ClassTwo();

doSomething($classOne);
doSomething($classTwo);

并将抛出一个致命的错误:

致命错误:未捕获的 TypeError:传递给 doSomething() 的参数 1 必须是对象的实例,给出的是 OperationOne 的实例

解决此问题的方法是声明一个不定义方法的简并接口,并让所有对象都实现此接口。

<?php

interface Object {}

function doSomething(Object $obj) {
    return $obj;
}

class ClassOne implements Object {}
class ClassTwo implements Object {}

$classOne = new ClassOne();
$classTwo = new ClassTwo();

doSomething($classOne);
doSomething($classTwo);