【问题标题】:PHP - use of bareword in interface function declarationsPHP - 在接口函数声明中使用裸词
【发布时间】:2013-04-29 09:30:11
【问题描述】:

查看有关接口的 PHP 文档,特别是这里:PHP: Object Interfaces - Manual。以下代码作为工作示例给出。有人可以解释一下被声明为函数签名一部分的裸词“Baz”是什么吗?

<?php
interface a
{
    public function foo();
}

interface b extends a
{
    public function baz(Baz $baz);
}

// This will work
class c implements b
{
    public function foo()
    {
    }

    public function baz(Baz $baz)
    {
    }
}

【问题讨论】:

    标签: php interface bareword


    【解决方案1】:

    它被称为type hinting。

    baz() 方法要求第一个参数$baz 是Baz 类型的对象。一个对象的类型要么来自它所构建的类,要么来自它实现的接口。

    【讨论】:

    • 你们太容易了。 20 分钟在谷歌上搜索 php 函数 bareword 之类的,一无所获。甚至在这里的回复告诉某人在编程中使用这样的裸词是闻所未闻的!在这里快速发布,并在 10 分钟内...砰! :)
    • 我可能自己花了几个小时来弄清楚和理解这样的东西。当某件事来之不易时,很容易解释回来。
    • 确实如此。我发现我得到的东西很快就会从我的知识中消失,就像不使用它们一样快。我会记住这个的! :)
    【解决方案2】:

    在类 c 中,函数 baz() 需要一个参数,该参数是类 Baz 的对象。 $baz 只是对象名称。在baz()的函数内部使用。

    它叫Type Hinting

    PHP 5 引入了类型提示。函数现在可以强制 参数是对象(通过在 函数原型)、接口、数组(自 PHP 5.1 起)或可调用 (自 PHP 5.4 起)。但是,如果使用 NULL 作为默认参数 值,它将被允许作为任何以后调用的参数。

    如果类或接口被指定为类型提示,那么它的所有孩子 或者也允许实现。

    类型提示不能用于标量类型,例如 int 或 string。 特征也是不允许的。

    【讨论】:

      【解决方案3】:

      根据documentation,它被称为类型提示

      Baz 是类的名称

      因此 baz 方法期望第一个参数 $baz 是一个对象

      【讨论】:

      • 是的,当您知道自己在寻找什么时,文档就很棒!显然,我不知道寻找类型提示。感谢您的链接。
      • 干杯@dewd。希望你得到你的答案。请务必接受所有您喜欢的答案。
      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2015-02-15
      • 1970-01-01
      相关资源
      最近更新 更多