没有美元符号的函数参数是什么意思?

时间:2015-12-01 05:20:41

标签: php function oop parameters type-hinting

我一直在学习PHP OOP,我遇到了这个有趣的函数声明:

class ShopProductWriter {

    public $products = array();

    public function addProduct(ShopProduct $shopProduct) {
        //code here..
    }
}

注意addProduct函数ShopProduct的第一个参数如何没有美元符号?这是什么意思?

2 个答案:

答案 0 :(得分:2)

它不是参数。它是$ shopProduct的类型定义。此函数只需1个参数,因此$ shopProduct只能是ShopProduct类

答案 1 :(得分:0)

这是打字。

参数列表必须以逗号分隔。它位于参数前面并声明参数的类型。

您的示例typehint适用于类ShopProduct的对象。

含义:如果传递了其他内容,如整数或数组,则该方法将引发异常。 (它反映了继承。假设有一个SpecificShopProduct的实例,一个可以扩展ShopProduct的类,你也可以传递它。)

可以输入提示对象和数组,类或接口。无法键入正常变量类型(如整数或字符串),也无法键入提示对象数组。

public function foo(array someArray, LoggerInterface $logger)
{
}

然而对于其他一些类型,您可以使用phpDoc注释,但这些注释是为了可读性和IDE支持,它们不会强制执行类型;这意味着你必须自己检查是否通过了正确的类型。

/**
 * @param ShopProductWriter[] arrayOfObjects
 * @param int $someInt
 * @param string $someString
 */

public function foo(array arrayOfObjects, $someInt, $someString)
{
}