我怎样才能把两个类包含在一起呢?


How can I include two classes in each other?

假设我有两个PHP类一个名为gallery另一个名为image

在类图像中我想包含类图库,在类图库中我想包含类图像。

如何才能正确地做到这一点-或者完成这一点的最佳方法是什么?最后我想做的是在类image的一些方法中使用类gallery的方法。

例如:我在两个类中都有一个方法"delete"。在类gallery中,该方法用于删除特定的画廊-按id选择。但是在类image中的方法delete还检查被删除的图像是否是图库中的最后一张-如果是,则应该通过将id传递给类gallery的delete方法来删除此图库。

如何才能做到最好?-或者是否有一种完全不同的更好的方法来做这件事?

谢谢你的回答!

image实例有一个它所属的库的实例(如果它可以属于多个库,这会使事情变得复杂)。

class Image {
   private $gallery;
   private $db;
   public function __construct(Gallery $gallery, DB $db) {
      $this->gallery = $gallery;
      $this->db = $db;
   }
   public function delete($id) {
      $this->db->deleteImage($id);
      if ($this->gallery->isEmpty()) {
         $this->gallery->delete($this->gallery->getID());
      }
   }
}

使您的图库成为实例化图像类的唯一位置,然后在图像的构造函数中设置一个属性,以便图库传递对自身的引用。

,

// in class Image
...
function Image($gallery) {
    $this->gallery = $gallery;
}
...
// in class Gallery
...
function get_image($id) {
    $img = new Image($this);
    ...
    return $img;
}
...
$image = $gallery->get_image(1);
编辑:

看来ExplosionPills比我先举了一个更好的例子