鍵入提示通用物件

由於 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);