2

所以我找到了这个例子,我正在学习php oop,我想问一下addProduct方法中的参数ShopProduct是什么意思以及它有什么作用?

abstract class ShopProductWriter {
    protected $products = array();
    public function addProduct( ShopProduct $shopProduct ) {
        $this->products[]=$shopProduct;
    }
}
4

4 回答 4

6

让我们一行一行地看:

abstract class ShopProductWriter {

声明一个abstract名为ShopProductWriter. abstract类不能被实例化(你永远不能有一个实例ShopProductWriter。)为了使用这个类,你必须创建一个扩展类ShopProductWriterhttp://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.phphttp://php.net/manual/en/language.oop5.basic.php

public function addProduct( ShopProduct $shopProduct ) {

定义了一个public名为的可见函数addProduct,这个函数可以在任何类实例扩展的类上下文之外调用ShopProductWriter。此函数采用单个参数,该参数必须是ShopProductOR 子类扩展的实例ShopProduct (“如果将类或接口指定为类型提示,则也允许其所有子类或实现。”参见http://php.net/manual/ zh/language.oop5.typehinting.php)。

$childInstance = new ChildCLassExtendingShopProductWriter();
$childInstance->addProduct($IAmAShopProductInstance);

最后,

$this->products[]=$shopProduct;

该函数将传递给 addProduct 函数的任何实例添加到类数组products中。

于 2013-03-02T16:52:36.447 回答
4

这意味着$shopProduct必须是ShopProduct类的实例

但请注意,类型提示仅适用于对象、数组和接口。例如,您不能为字符串做类型提示

不能

function wontWork(string $string) {}

于 2013-03-02T16:39:08.530 回答
1

它将给定的产品添加到对象存储的产品列表中。

于 2013-03-02T16:38:10.417 回答
0

ShopProductWriter是一个抽象类。并且$products是一个受保护的变量,其中array存储 addProduct的是一个函数,其中对象存储的产品列表

于 2013-03-02T16:40:27.607 回答