PHP OOP类的商店模式

use*_*554 6 php oop

我对使用OOP管理商店项目的系统设计存在疑问.我创建了具有$ name和$ price属性的抽象类Product.后来我创建了扩展Product的类Smartphone.智能手机具有$ brand和$ os属性.后来我创建了扩展Product的类Computer,其属性为$ cpuFrequency和$ ram.现在,如果我想创建一个与Nexus 5相对应的对象,例如,我该怎么办?例如,考虑一下这个对象会有

$name = "Nexus 5"
$price = "250"
$brand = "LG"
$os="Android"
$cpuFrequency "2.0"
$ram = "2".
Run Code Online (Sandbox Code Playgroud)

这是一个类的例子.

abstract class Product {
    private $name;
    private $price; 
    //more methods
}

class Smartphone extends Product{
    private $brand;
    private $os;    
}

class Computer extends Product {
    private $cpuFrequency;
    private $ram;   
}
Run Code Online (Sandbox Code Playgroud)

还认为可能有没有$ os的计算机和没有$ ram的智能手机.举个例子:D

PS我知道智能手机是一台电脑.我做了一个坏榜样.请在电话和电脑上思考.电话有$ number和$ operator.现在我想创建一个同时是电话和电脑的智能手机.

谢谢大家,再次抱歉我的英语

Edg*_*gar 1

您可以尝试使用 ProductProperties 类,如下所示:

class ProductProperties
{
    private properties = array();

    public function getProperties()
    {
        return this->properties;
    }

    public function addProperty($id, $value)
    {
        this->properties[$id] = $value;
    }

    public function getProperty($id)
    {
        return this->properties[$id];
    }
}

abstract class Product
{
    private $properties;
    //more methods

    public function __construct(ProductProperties $properties)
    {
        $this->properties = $properties;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以将 ProductProperties 类的对象传递给任何产品,并让它处理所有与属性相关的问题。这将实现更灵活的设计,这样您就不需要仅仅因为产品具有一组不同的属性而进行子类化。请记住,子类化就是更改或添加行为。