好吧,所以我手上有两个问题,那些是
<?php
abstract class Person {
abstract function getUserItems();
}
class inventory extends Person {
protected $storage = array();
protected $item_id;
public function itemAdd($itemname) {
$storage[$this->item_id+1] = $itemname;
}
public function getUserItems() {
foreach($this->storage as $itemName=>$item_id) {
echo $itemName." ".$item_id."<br/>";
}
}
}
$user = new Person();
$user->getUserItems();
/*$user = new inventory();
$user->itemAdd("Item 1");
$user->itemAdd("Item 2");
$user->getUserItems();*/
?>
答案 0 :(得分:1)
在OOP中 - 抽象类may not be instantiated。
An abstract class是一个包含将继承的实现和接口(纯虚方法)的类。接口通常没有任何实现,只有纯虚函数。
所以你无法实例化(new Person()
)。您必须扩展此抽象类并实现它的abtract函数(与库存中的方法相同)。
关于echo
问题 - 在您的itemAdd
函数中,您没有使用对象的$storage
成员(您只使用了本地$storage
变量)。您应该使用$this->storage
:
public function itemAdd($itemname) {
$this->storage[$this->item_id+1] = $itemname;
}
请注意,我不确定您是如何管理
$this->item_id
成员的,因为您未在代码中设置/更改它。
如果您只想向storage
成员添加新项目,可以使用:
$this->storage[] = $itemname;
这将确保每个新项目都会添加到$storage
数组。
答案 1 :(得分:0)
AD1)
Person是抽象类,因此您无法创建该类的对象。
AD2)
您必须使用$this
所以不是:
$storage[$this->item_id+1]
但
$this->storage[++$this->item_id]
在这里我修复了另一个错误,即$ this-&gt; item_id + 1
答案 2 :(得分:0)
抽象类不能直接访问,而是从其他类访问。
abstract class Person {
abstract function getUserItems();
}
class inventory extends Person {
protected $storage = array();
protected $item_id=2;
public function itemAdd($itemname) {
$storage[$this->item_id+1] = $itemname;
}
public function getUserItems() {
foreach($this->storage as $itemName=>$item_id) {
echo $itemName." ".$item_id."<br/>";
}
}
}
$user = new inventory();
$user->getUserItems();
$user = new inventory();
$user->itemAdd("Item 1");
$user->itemAdd("Item 2");
$user->getUserItems();