在函数声明的签名中在参数名称之前指定类名会有什么影响?

时间:2012-05-02 17:30:57

标签: php

之间有什么区别:

public function init(a_class_name $classObj)

public function init($classObj)

不同之处在于示例1指定了我得到的对象类型。我的问题是:php仍然通过引用传递对象(默认行为)或者是示例1克隆对象的一些奇怪的快捷方式。我只是问,因为在更严格的语言(C,Java)中,示例1非常简单(并且是唯一可行的示例)。在PHP中它并不那么清楚,并且这两种方法都在PHP文档的不同位置使用。

感谢。

3 个答案:

答案 0 :(得分:5)

这称为type hint

  

PHP 5引入了类型提示。函数现在能够强制参数为对象(通过在函数原型中指定类的名称),接口,数组(自PHP 5.1起)或可调用(自PHP 5.4起)。

- http://php.net/manual/en/language.oop5.typehinting.php

在这两种情况下(有和没有类型提示),对象通过引用传递。这并没有改变。

答案 1 :(得分:1)

据我所知,

a_class_name可以是数组类型,也可以是接口名称。它只是验证了针对该规则给出的形式参数,就像instanceof那样。

此功能不适用于简单类型,如int,bool,string,...

答案 2 :(得分:1)

不同之处在于,对于第一个,您只能将类型为a_class_name的对象传递给init方法,但对于第二个,您可以传递任何类型(int,string ...等)