-1

我尝试在 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);
4

1 回答 1

2

您的object构造函数定义了一个参数$txt来实例化该类。stack2在继承自您的类中,object还必须编写一个构造函数,该构造函数使用所需的参数调用其父构造函数。

class stack2 extends object {
  public function __construct() {
    $txt = 'your text here';

    parent::object($txt);
  }
}

我会使用魔术方法__construct而不是与类同名的方法。因为如果您重构类名称,您还必须重构您的构造函数名称。

.您的第二个错误是您使用 a而不是调用对象的方法->。所以正确的行是:

$arr[$this->head]->back($this->head-1);

比你想适当地使用$arr你的stack类的属性,所以你必须使用$this->arr而不是简单地$arr在上面的示例行中使用。

于 2013-11-04T07:53:31.490 回答