-1

这是我想做的事情:

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

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

那么,它应该工作吗?

谢谢

4

2 回答 2

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

}

修复它以使其真正起作用。是的,这是完全可能的并且是明智的(好吧,这个特定的代码是否有意义还有待商榷,但总的来说)。这不是真正的递归。您只是在另一个类的方法中实例化一个类。您正在实例化的类与您正在实例化它的方法所属的类相同(现在这是一个复杂的句子)并不重要。

于 2013-10-28T12:31:43.663 回答
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->value()”中有错误。值不是方法 - 它是字段并且应该调用 $x->value

于 2013-10-28T12:36:55.100 回答