2

有什么区别:

public function init(a_class_name $classObj)

public function init($classObj)

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

谢谢。

4

3 回答 3

5

这称为 aa类型提示

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

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

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

于 2012-05-02T17:33:12.457 回答
1

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

此功能不适用于 int、bool、string 等简单类型...

于 2012-05-02T17:34:14.517 回答
1

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

于 2012-05-02T17:34:37.423 回答