【发布时间】:2014-11-25 21:36:06
【问题描述】:
我对 PHP 中的 OOP 相当陌生,我想就以下案例的最佳实践提供一些建议: 说,我拥有一家出售不同种类东西的商店,例如。书籍、电影和餐盘。这些不同的产品类型各自具有不同的属性(餐盘有颜色和材质,书籍有作者,电影有演员和导演)。我可以为我销售的每种产品类型创建一个类,但是当我还想卖猫时,我需要重新编码。相反,我可以创建一个类“产品”,它具有所有产品都具有的一些属性(例如名称、价格、条形码)。现在,存储 producttype 特定属性、其他类“producttype”的实例或只是 product 中的简单数组的最佳方式是什么?
希望下面的例子能更好地解释它:
class product {
private $s_name;
private $i_price;
private $s_barcode;
private $o_properties;
function __construct ( $name, $productType ) {
$this->s_name = $name;
$this->i_price = getPriceFromDb ( $name );
$this->s_barcode = getBarcodeFromDb ( $name );
$this->o_properties = new productType ( $this->s_name, $productType )
}
}
class productType {
private $a_propertieValues;
private $a_datatypes;
private $a_requiredFields;
function __construct ( $name, $productType ) {
$this->a_datatypes = getDatatypesFromDb ( $productType );
$this->a_propertieValues = getPropertieValuesFromDb ( $name );
$this->a_requiredFields = getRequiredFieldsFromDb ( $productType );
}
}
在上面的示例中,还可以轻松存储(例如)不同产品类型所具有的不同属性的数据类型和必填字段。另一种方法是简单地使用一个数组(见下文),但是您需要将数据类型存储在另一个数组中,否则您的数组会变得非常大,并且您总是返回整个数组。
class product {
private $s_name;
private $i_price;
private $s_barcode;
private $a_properties;
function __construct ( $name, $productType ) {
$this->s_name = $name;
$this->i_price = getPriceFromDb ( $name );
$this->s_barcode = getBarcodeFromDb ( $name );
$this->a_properties = getOtherPropertiesFromDb ( $productType, $name );
}
}
我认为最后一个选项会破坏对象的用途,但我不确定。我已经研究了扩展类产品的可能性,但是我仍然需要每个产品类型都有一个特定的类。如果我忽略了其他选项,请告诉我。
我希望我已经以您可以理解的方式解释了这一点。
编辑:我现在看到我没有很清楚地问我的问题,事实上,我问了错误的问题。我因此问了一个新问题:https://stackoverflow.com/questions/27138816/
【问题讨论】:
-
我的建议是使对象尽可能自然。还考虑使用任何框架,如 ex zf2
-
“更自然”到底是什么意思?你能根据我举的例子举个例子吗?
-
将类视为名词,将对象视为它们的具体版本。例如想代表狗?创建一个
Dog类,并将所有必需的属性作为成员。想代表 Max 邻居的总督?new Dog('Max');
标签: php arrays class oop object