2013-05-05 70 views
3

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

<?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) 
    { 
    } 
} 

回答

4

它被称为type hinting

baz()方法预计第一个参数$bazBaz类型的对象。对象的类型来自它所构建的类,或者来自它实现的接口。

+0

你们这样做太简单了。 20分钟的各种搜索谷歌PHP功能裸字和类似的东西。即使是在这里的回应告诉某人使用这样的裸词在编程中是闻所未闻的!快速发布在这里,并在10分钟内...砰! :) – dewd 2013-05-05 13:43:03

+0

我大概用了几个小时弄清楚和理解这样的东西。当某件事情难以胜出时,很容易将其解释清楚。 – 2013-05-05 13:48:16

+0

确实如此。我发现我得到的东西很快就从我的知识中消失,如果它们不被使用,就会很快消失。我会记住这一个! :) – dewd 2013-05-05 13:57:06

0

作为每documentation它被称为类型暗示

巴兹是类名

并且因此巴兹方法预期的第一个参数,$ baz,将成为对象

+0

是的,文档是伟大的,当你知道你在找什么!显然,我不知道寻找类型暗示。感谢您的链接。 – dewd 2013-05-05 13:39:55

+0

干杯@dewd。希望你有你的答案。确保接受所有你喜欢的答案。 – 2013-05-05 13:41:31

2

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

这就是所谓的Type Hinting

PHP 5只引入了类型提示。函数现在能够强制 参数成为对象(通过在 函数原型中指定类的名称),接口,数组(从PHP 5.1开始)或可调用的 (从PHP 5.4开始)。但是,如果将NULL用作默认参数 的值,则它将被允许作为任何稍后调用的参数。

如果类或接口被指定为类型提示,则其所有子项 或实现也被允许。

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