1

したがって、たとえばfooというクラスがあり、mongoまたはmysqlのいずれかにデータを格納する2つの方法があります。

現時点で私は次のようなものを持っています

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 に答える