在函数声明的签名中,在参数名称之前指定类名有什么效果


What is the effect of specifying a class name before a argument name in the signature of a function declaration?

两者之间有什么区别吗:

public function init(a_class_name $classObj)

public function init($classObj)

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

谢谢。

称为类型提示。

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

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

在这两种情况下(带或不带类型提示),对象都是通过引用传递的。这不会改变。

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

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

此功能不适用于简单的类型,如整数、布尔值、字符串等。