为什么PHP堆栈(我建立)没有工作?

时间:2013-11-04 07:51:04

标签: php stack

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

1 个答案:

答案 0 :(得分:2)

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

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

    parent::object($txt);
  }
}

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

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

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

您想要使用$arr课程的stack属性,因此您必须在上面的示例行中使用$this->arr而不是简单的$arr