且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何处理多个构造函数参数或类变量?

更新时间:2023-09-17 15:02:28

流畅的界面是另一种解决方案。

A fluent interface is another solution.

class Foo {
  protected $question;
  protected $content;
  protected $creator;
  ...

  public function setQuestion($value) {
    $this->question = $value;
    return $this;
  }

  public function setContent($value) {
    $this->content = $value;
    return $this;
  }

  public function setCreator($value) {
    $this->creator = $value;
    return $this;
  }

  ...
}

$bar = new Foo();
$bar
  ->setQuestion('something')
  ->setContent('something else')
  ->setCreator('someone');

或使用继承...

class Foo {
  protected $stuff;

  public function __construct($stuff) {
    $this->stuff = $stuff;
  }

  ...
 }

class bar extends Foo {
  protected $moreStuff;

  public function __construct($stuff, $moreStuff) {
    parent::__construct($stuff);
    $this->moreStuff = $moreStuff;
  }

  ...
}

或使用可选参数...

Or use optional parameters...

class Foo {
  protected $stuff;
  protected $moreStuff;

  public function __construct($stuff, $moreStuff = null) {
    $this->stuff = $stuff;
    $this->moreStuff = $moreStuff;
  }

  ...
}

无论如何,有很多好的解决方案。请不要使用单个数组作为参数或func_get_args或_ get / _set / __ call魔术,除非您有充分的理由这样做并且已经用尽了所有其他选项。

In any case, there are many good solutions. Please dont use a single array as params or func_get_args or _get/_set/__call magic, unless you have a really good reason to do so, and have exhausted all other options.