PHP类递归:我可以在自己的类的方法中创建给定类的对象吗?

时间:2013-10-28 12:26:36

标签: php class recursion

这是我想做的事情:

class number {
  var $value ;
  function number($n=0) {
    $this->value = $n ;
  }
  function add($n) {
    $x = new number($n) ;
    $this->value += $x->value ;
  }
}

这个例子当然是荒谬的,但它说明了我想在一个更严肃的项目中做的递归。 (我实际上是在操纵图像而不是数字,但我认为这并不重要。)

那么,它应该有用吗?

由于

2 个答案:

答案 0 :(得分:1)

class Number {

    protected $value;

    public function __construct($n = 0) {
        $this->value = $n;
    }

    public function add($n) {
        $x = new static($n);  // or self($x), if you're on PHP < 5.3
        $this->value += $x->value;
    }

}

修正了它实际上使它工作。是的,这是完全可能和明智的(好吧,这个特定的代码是否有意义,但一般而言,这是有争议的)。这不是真正的递归。您只是在另一个类的方法中实例化一个类。最轻微的是,你实例化的类与你实例化它的方法所属的类相同(现在这是一个复杂的句子)。

答案 1 :(得分:0)

为你做例子。这是一个小例子:

  class number {
      var $value ;
      function number($n=0) {
      $this->value = $n ;
  }
  function add($n) {
      $x = new number($n) ;
      $this->value += $x->value ;
      return $this->value;
  }
}

$foo = new number;
echo $foo->add(2);
echo $foo->add(2);

您的代码“$ x-&gt; value()”出错。值不是方法 - 它是字段,应该调用$ x-&gt; value