我尝试用PHP构建堆栈,但它不起作用。
这是我看到的问题:
Warning: Missing argument 1 for object::object(), called in C:'Program Files (x86)'EasyPHP-12.1'www'tb'index.php on line 152 and defined in C:'Program Files (x86)'EasyPHP-12.1'www'tb'index.php on line 126
Notice: Undefined variable: txt in C:'Program Files (x86)'EasyPHP-12.1'www'tb'index.php on line 127
Fatal error: Call to undefined function back() in C:'Program Files (x86)'EasyPHP-12.1'www'tb'index.php on line 146
这是代码:(我在代码中用//写了问题的行)
class object {
private $obj;
private $next = null;
private $back = null;
public function object($txt) { // line 126
$this->obj = $txt; // line 127
}
public function back($back) {
$this->back = $back;
}
public function next($next) {
$this->next = $next;
}
}
class stack2 extends object {
private $arr;
private $head = -1;
private $tail = 0;
public function push($txt) {
$this->head++;
$arr[$this->head] = new object($txt);
if ($this->head-1 >= $this->tail) {
$arr[$this->head].back($this->head-1); // line 146
$arr[$this->head-1].next($this->head);
}
}
}
$s = new stack2(); // line 152
$s->push(11111);
$s->push(22222);
您的object
构造函数定义了一个参数$txt
用于实例化类。在从object
固有的类stack2
中,您还必须编写一个构造函数,该构造函数使用所需的参数调用其父构造函数。
class stack2 extends object {
public function __construct() {
$txt = 'your text here';
parent::object($txt);
}
}
我会使用 magic 方法__construct
而不是与类同名的方法。因为如果你重构类名,你还必须重构你的构造函数名称。
第二个错误是使用.
而不是->
调用对象的方法。所以正确的行是:
$arr[$this->head]->back($this->head-1);
您希望适当地使用 stack
类的属性$arr
,因此您必须使用 $this->arr
,而不是简单地$arr
上面的示例行。