所以我找到了这个例子,我正在学习php oop,我想问一下addProduct方法中的参数ShopProduct是什么意思以及它有什么作用?
abstract class ShopProductWriter {
protected $products = array();
public function addProduct( ShopProduct $shopProduct ) {
$this->products[]=$shopProduct;
}
}
所以我找到了这个例子,我正在学习php oop,我想问一下addProduct方法中的参数ShopProduct是什么意思以及它有什么作用?
abstract class ShopProductWriter {
protected $products = array();
public function addProduct( ShopProduct $shopProduct ) {
$this->products[]=$shopProduct;
}
}
abstract class ShopProductWriter {
声明一个abstract
名为ShopProductWriter
. abstract
类不能被实例化(你永远不能有一个实例ShopProductWriter
。)为了使用这个类,你必须创建一个扩展类ShopProductWriter
。见http://php.net/manual/en/language.oop5.abstract.php
protected $products = array();
创建一个名为的类变量$products
,它是一个数组。这个变量的可见性是protected
。这意味着$products
只能使用 this 运算符从类上下文中访问。此外,$this->products
将可用于所有扩展ShopProductWriter
. 见http://php.net/manual/en/language.oop5.visibility.php和http://php.net/manual/en/language.oop5.basic.php
public function addProduct( ShopProduct $shopProduct ) {
定义了一个public
名为的可见函数addProduct
,这个函数可以在任何类实例扩展的类上下文之外调用ShopProductWriter
。此函数采用单个参数,该参数必须是ShopProduct
OR 子类扩展的实例ShopProduct
(“如果将类或接口指定为类型提示,则也允许其所有子类或实现。”参见http://php.net/manual/ zh/language.oop5.typehinting.php)。
$childInstance = new ChildCLassExtendingShopProductWriter();
$childInstance->addProduct($IAmAShopProductInstance);
最后,
$this->products[]=$shopProduct;
该函数将传递给 addProduct 函数的任何实例添加到类数组products
中。
这意味着$shopProduct
必须是ShopProduct
类的实例
但请注意,类型提示仅适用于对象、数组和接口。例如,您不能为字符串做类型提示
你不能做
function wontWork(string $string) {}
它将给定的产品添加到对象存储的产品列表中。
ShopProductWriter
是一个抽象类。并且$products
是一个受保护的变量,其中array
存储
addProduct
的是一个函数,其中对象存储的产品列表