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)
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.php和http://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.