我有几个扩展"Shop"的类,最好的方法是什么,以便父函数即:list_items()可以在子类上使用?
class Shop
{
public function list_items() {
foreach($wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
使用
$this
在你的商店类中。$this 是非静态属性或方法的关键字。使用$this,您可以访问所有类属性,例如公共$wares。如果没有$this,您将无法访问类属性 - 此变量是未知的。
foreach($this->wares as $w)
并在脚本末尾调用函数 makeshop():
makeshop();
如此完整:
<?php
class Shop
{
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
makeshop();
?>
$wares
确实是未定义的,因为您应该使用 $this->wares
访问它。
此外,始终将方法和属性的可见性限制到最大。例如。在这里您可以将其设置为 protected
.
接下来的事情是你应该坚持一个命名约定。在一个项目中使用 makeShop
和list_items
并不是一个好主意。
当你扩展一个类时,你会继承它的所有函数。因此,只需像使用任何其他类方法一样使用 $this->list_items()
引用它们。
$wares
不可见,因为它不是来自任何地方。
将其作为函数参数传递或将其用作类成员:
public function list_items($wares) {
foreach($wares as $w)
echo $w;
}
或:
class Shop
{
public $wares = [];
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}
您可以在其他类中使用 Shop 中的所有公共方法和受保护方法。