php类中的长属性列表 - 我可以缩短它吗?

时间:2012-10-10 01:28:00

标签: php oop class properties

我有两节课。两个类都使用属性列表,这些属性是相同的。此属性列表长度为75行。我想将它放在一个单独的文件中,然后两个类都可以访问。但我无法使用include。

如何更短地修改文件,更改属性列表会更灵活?

我不确定我是否提出了我的观点,所以我举一个例子:

我有 class foo class bar

两个类中都使用了水果列表属性私有$ apples 私有$ bananas 私有$ grapes 。此外,这两个类都有一些其他属性,这些属性特定于每个类。

我想做这样的事情:

class foo 
{
 private $variable_one
 private $variable_two

 //DEFINE THE LIST OF FRUIT PROPERTIES HERE

 public function blahbla...
}

和其他文件

class foo 
{
 private $variable_three
 private $variable_four

 //DEFINE THE LIST OF FRUIT PROPERTIES HERE

 public function gibberish...
}

现在因为将来我可能会扩展我的水果列表并添加菠萝和芒果但是除去香蕉,将该列表作为文件放在一个单独的地方会很方便,我可以修改它,以及所做的任何更改都将被任何使用水果属性列表的类采用。

此外,它只是帮助我减少文件的长度...就像我说的,我的水果列表目前是75行长,在这两个类的前面都有这么长的模糊,这是相当烦人的。

我感谢有关如何实现这两个目标的任何意见或建议(灵活性和短文件)。

非常感谢!

3 个答案:

答案 0 :(得分:5)

听起来这两个类都应该从定义公共属性的基类继承。查看PHP manual on object inheritance

// The base class defines common properties
class FooBase {
  // protected properties will be available to extending classes
  protected $apples;
  protected $bananas;
  protected $oranges;
}
// Foo extends FooBase, inheriting its protected & public properties
class Foo extends FooBase {
  private $variable_one;
  private $variable_two;

  public function __construct() {
    // Initialize some stuff
    $this->apples = 3;
  }
  public function getApples() {
    // $this->apples inherited from FooBase
    echo $this->apples;
  }
}
// Bar also extends FooBase, and inherits the same 3 properties
class Bar extends FooBase {
  private $variable_three;
  private $variable_four;

  public function __construct() {
    $this->oranges = 9;
  }
  public function getOranges() {
    echo "I have {$this->oranges} oranges too!";
  }
}

答案 1 :(得分:2)

您可以使用inheritance

class FruitObject {
    protected $apples;
    protected $bananas;
    // ...
}

class Foo extends FruitObject {
    private $var1;
    private $var2;
}

class Bar extends FruitObject {
    private $var1;
    private $var2;
}

答案 2 :(得分:0)

仅仅因为您使用OOP并不意味着您不能使用数组来存储不同类型。这样,除了inheritance之外,在进入实际实现之前,您不必担心声明所有不同类型的属性。

// The base class defines common properties
class FooBase {
  // protected properties will be available to extending classes
  protected $fruit=array();
}
// Foo extends FooBase, inheriting its protected & public properties
class Foo extends FooBase {
  private $variable_one;
  private $variable_two;
  protected $fruitType;

  public function __construct() {
    //declare a fruitType
    $this->fruitType = 'apples';  
    // Initialize some stuff
    $this->fruit[$this->fruitType] = 3;
    //test it on load
    $this->getFruit();
  }
  public function getFruit() {
    // $this->fruit inherited from FooBase
    echo $this->fruit[$this->fruitType];
  }
}
// Bar also extends FooBase, and inherits the same 3 properties
class Bar extends FooBase {
  private $variable_three;
  private $variable_four;
  protected $fruitType;

  public function __construct() {
    $this->fruitType = 'oranges';
    $this->fruit[$this->fruitType] = 9;
    $this->getOtherFruit();
  }
  public function getOtherFruit() {
    echo "I have {$this->fruit[$this->fruitType]} {$this->fruitType} too!";
  }
}