我有一個小問題,在網路上找不到答案,也不太確定php和介面的工作原理。
所以問題是我有一個if(!variable instanceof class)。但是在這裡,被檢查的類別是一個接口,應該在一個數組中,你可以在以下程式碼中看到
abstract class Action { final public function call(Bone $bone) { $sites = $this->getSites($bone); foreach ($sites as $site) { if (!$site instanceof Site) { throw new \Exception("Invalid entry"); } } } } class BonesSites { public function getSites(string $site): array { if ($site === 'Egypt') { return [ [ 'siteId' => 1, 'name' => 'Cairo', 'bone' => 'T-Rex bones', ], [ 'siteId' => 2, 'name' => 'Giza', 'bone' => 'Raptors bones', ], [ 'siteId' => 3, 'name' => 'Alexandria', 'bone' => 'Bronchiosaurus bones', ], ]; } return ['error' => 'Site not found!']; } } interface Bone { public function getName(): string; } interface Site { } 有什麼辦法在陣列中回傳一個介面嗎?
您需要建立一個名為Site的額外類,並傳回一個物件數組。
class Site { private int $siteId; private string $name; private string $bone; /** * @param int $siteId * @param string $name * @param string $bone */ public function __construct(int $siteId, string $name, string $bone) { $this->siteId = $siteId; $this->name = $name; $this->bone = $bone; } /** * @return int */ public function getSiteId(): int { return $this->siteId; } /** * @param int $siteId */ public function setSiteId(int $siteId): void { $this->siteId = $siteId; } /** * @return string */ public function getName(): string { return $this->name; } /** * @param string $name */ public function setName(string $name): void { $this->name = $name; } /** * @return string */ public function getBone(): string { return $this->bone; } /** * @param string $bone */ public function setBone(string $bone): void { $this->bone = $bone; } }然後傳回網站陣列: