PHP:在作为对象的类属性上调用方法

时间:2016-01-07 15:56:18

标签: php mysql pdo

如果这是一个好的做法,或者有更好的清洁方法可以让我知道吗?它对我来说看起来很笨拙,所以我想知道我之前是否有过这样的原因。

Class A {
  public $instance_of_b;

  function __construct () {
    $this->instance_of_b = new B;
  }

  function deeper_hello() {
    $this->instance_of_b->say_hi();
  }
}

Class B {
  public function say_hi() {
    echo "Hello, from B!";
  } 
}

$instance_of_a = new A;
$instance_of_a->deeper_hello();

它解析为PHP,因此它没有语义错误,但是有更简洁的方法吗?

我应该说,这显然不是我的代码,它只是方法。我实际上在做的是创建一个使用PDO的SQL类。在那个SQL类中,我正在SQL类的属性中记录PDO和PDOStatment对象。

1 个答案:

答案 0 :(得分:0)

不是在A中实例化B,而是通过构造函数将B传递给A会更好。这称为依赖注入,通过这样做,A不再与B紧密耦合。

Class A {
  public $instance_of_b;

  function __construct ($b) {
    $this->instance_of_b = $b;
  }

  function deeper_hello() {
    $this->instance_of_b->say_hi();
  }
}

Class B {
  public function say_hi() {
    echo "Hello, from B!";
  } 
}

$instance_of_b = new B;
$instance_of_a = new A($instance_of_b);
$instance_of_a->deeper_hello();