之间有什么区别:
public function init(a_class_name $classObj)
和
public function init($classObj)
不同之处在于示例1指定了我得到的对象类型。我的问题是:php仍然通过引用传递对象(默认行为)或者是示例1克隆对象的一些奇怪的快捷方式。我只是问,因为在更严格的语言(C,Java)中,示例1非常简单(并且是唯一可行的示例)。在PHP中它并不那么清楚,并且这两种方法都在PHP文档的不同位置使用。
感谢。
答案 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 ...等)