我一直在学习PHP OOP,我遇到了这个有趣的函数声明:
class ShopProductWriter {
public $products = array();
public function addProduct(ShopProduct $shopProduct) {
//code here..
}
}
注意addProduct
函数ShopProduct
的第一个参数如何没有美元符号?这是什么意思?
答案 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)
{
}