将PHP类构造为Parent Child的正确方法是什么?

时间:2011-05-20 08:15:14

标签: php class parent-child

我有以下PHP类

  class.property.php 
  class.location.php
  class.amenity.php
  class.category.php

所有四个类都处理不同类别的相应CRUD操作。我想重构我的代码,因此想要使用父子结构。

例如,我曾经在每个页面上初始化类。

$property = new Property($dbh);
$location = new Location($dbh);
$category = new Category($dbh);
$amenity = new Amenity($dbh);

然后我习惯单独访问类方法和属性,如

$property->user;
$property->contact;
$property->save();

$location->countries();
$location-states();

而且,每个班级都是单独执行的,而不是像这样访问它我想用这种方式。

$property = new Property($dbh) 

上面应该是Parent类并且休息三个子类,所以我应该只能通过父类访问所有类方法和属性,例如我应该只能像这样访问它..

$property->location->countries();
$property->locations->states();
$property->location->countryId;
$property->amenity->name;
$property->amenity->save();

依旧......

我试图弄清楚如何做到这一点并推出了这个解决方案。

class Property{
    public $amenity;
    public function __construct() {
        require_once('class.amenity.php');
        $this->amenity = new Amenity;
    }
}

class Amenity {
    public function create($test) {
        return $test;
    }
}

现在,如果我想访问Amenity类中的create()方法,我只需调用

$property->amenity->create()

并且它有效,但是我想知道这是否是实现父子结构的正确方法,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

无需create()电话:

class Property{
    public $amenity;
    public function __construct() {
        require_once('class.amenity.php');
        $this->amenity = new Amenity;
    }
}

class Amenity {
}

$property = new Property;
$amenity = $property->amenity;

最多,您需要保护属性,并使用getter和setter。