傳回介面實例到數組中的PHP方法
P粉488464731
P粉488464731 2023-09-01 13:40:43
0
1
558
<p>我有一個小問題,在網路上找不到答案,也不太確定php和介面的工作原理。 </p> <p>所以問題是我有一個if(!variable instanceof class)。但是在這裡,被檢查的類別是一個接口,應該在一個數組中,你可以在以下程式碼中看到</p> <pre class="brush:php;toolbar:false;">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 { }</pre> <p>有什麼辦法在陣列中回傳一個介面嗎? </p>
P粉488464731
P粉488464731

全部回覆(1)
P粉447495069

您需要建立一個名為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;
    }

}

然後傳回網站陣列:

        return
            [
                (new Site(1, '开罗', 'T-Rex骨骼')),
                (new Site(2, '吉萨', '迅猛龙骨骼')),
                (new Site(3, '亚历山大', '腕龙骨骼'))
            ];
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!