1

因此,我有一个名为 foo 的类,并且有两种在 mongo 或 mysql 中存储数据的方法。

目前我有类似的东西

namespace vendor;

use bar;
use bar\mysql;

class foo extends bar\mongo {

}

现在有更好的方法吗?我知道有我只是不知道它是哪种模式(如果有的话)。

4

1 回答 1

3

可以应用的原理叫做:

优先组合而不是继承

这意味着不是从这些对象继承,而是提供这些对象的类实例,然后对其进行操作。

例如:

class Mysql
{
    function getItems($what)
    {
        //return items from mysql
    }
}

class MongoDB
{
    function getItems($what)
    {
        //return items from MongoDB    
    }    
}

class Foo
{
    protected $db;

    public function __construct($db)
    {
        $this->$db = $db;
    }

    public function getFooItems()
    {
        $this->db->getItems('foo')    
    }
}

$db = new Mysql();
$foo = new Foo($db)
$foo->getFooItems(); //Will operate on the mysql db

$db1 = new MongoDB();
$foo1 = new Foo($db1);
$foo1->getFooItems(); //Will operate on the MongoDB

我希望这有帮助

于 2012-06-13T09:16:46.473 回答