返回接口实例到数组中的PHP方法
P粉488464731
P粉488464731 2023-09-01 13:40:43
[PHP讨论组]

我有一个小问题,在互联网上找不到答案,也不太确定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
{
}

有什么办法在数组中返回一个接口吗?

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, '亚历山大', '腕龙骨骼'))
            ];
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号