在php中输入提示

Dri*_*lou 2 php oop arguments type-hinting

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

abstract class ShopProductWriter {
    protected $products = array();
    public function addProduct( ShopProduct $shopProduct ) {
        $this->products[]=$shopProduct;
    }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*llo 6

让我们逐行:

abstract class ShopProductWriter {
Run Code Online (Sandbox Code Playgroud)

声明一个abstract名为的类ShopProductWriter.abstract类无法实例化(您永远不能拥有实例ShopProductWriter.)为了使用此类,您必须创建一个扩展的类ShopProductWriter.http://php.net/manual/en/language.oop5.abstract.php

protected $products = array();
Run Code Online (Sandbox Code Playgroud)

创建一个名为$productsarray 的类变量.这个变量的可见性是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 ) {
Run Code Online (Sandbox Code Playgroud)

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

$childInstance = new ChildCLassExtendingShopProductWriter();
$childInstance->addProduct($IAmAShopProductInstance);
Run Code Online (Sandbox Code Playgroud)

最后,

$this->products[]=$shopProduct;
Run Code Online (Sandbox Code Playgroud)

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