首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对PHP中的类型提示感到困惑

对PHP中的类型提示感到困惑
EN

Stack Overflow用户
提问于 2019-04-17 07:28:19
回答 1查看 62关注 0票数 3

因此,请考虑以下示例:

代码语言:javascript
复制
interface ViewBuilderContract {
    public function addFormName(string $formName): self;
}

现在让我们实现这一点:

代码语言:javascript
复制
class ViewBuilder implements ViewBuilderContract {

    private $formNames = [];

    public function addFormName(string $formName): self {
        $this->formNames[] = $formName;

        return $this;
    }
}

docs而言:

self该参数必须是与在其上定义该方法的实例属于同一类的实例。这只能在类和实例方法上使用。

根据文档,这就是我通过返回$this所做的事情。

但是当我运行的时候:

代码语言:javascript
复制
(new ViewBuilder)->addFormName('sample');

我明白了,你可以看到here - click execute code

ViewBuilder::addFormName(string $formName):ViewBuilder的

声明必须与ViewBuilderContract::addFormName(string $formName):ViewBuilderContract兼容

从文件上看这是没道理的。它应该是有效的返回值。我只是删除self吗?如果是这样,为什么呢?有没有办法规定返回值呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 07:37:32

不能指定在接口中返回self。参见this answer for more information

您可以指定该函数返回一个ViewBuilderContract

代码语言:javascript
复制
<?php
    interface ViewBuilderContract {
        public function addFormName(string $formName): ViewBuilderContract;
    }

    class ViewBuilder implements ViewBuilderContract {

        private $formNames = [];

        public function addFormName(string $formName): ViewBuilderContract {
            $this->formNames[] = $formName;

            return $this;
        }
    }

Sandbox here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55717874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档