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


PHP class recursion: can I create an object of given class inside a method of own class?

这是我想要做的:

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

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

那么,它应该工作吗?

谢谢

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;
    }
}

修复它以实际使其工作。是的,这是完全可能和明智的(嗯,这个特定的代码是否有意义是有争议的,但总的来说)。这不是真正的递归。您只是在另一个类的方法中实例化一个类。你实例化的类与你实例化它的方法所属的类相同,这丝毫不重要(现在这是一个复杂的句子)。

为你做了个例子。下面是一个小例子:

  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->value()"中存在错误。值不是方法 - 它是字段,应该调用$x->值