質問
このような「複雑な」オブジェクトを、貼り付けたりコピーせずに簡単かつ便利に作成するにはどうすればよいですか?
解決策
新しいオブジェクトを作成するためのファクトリ (関数またはクラス メソッド) を作成します。ファクトリの有用性を理解するには、以下の違いを想像してください...
コード:
コードをコピー コードは次のとおりです:
$connection =& new MySqlConnection($user, $password, $database );
コードをコピーします コードは次のとおりです:
$connection =& create_connection();
コードをコピーします コードは次のとおりです:
// PHP4
class Product {
function getList() { $db = & new MysqlConnection(DB_USER , DB_PW, DB_NAME);
//...
}
function getByName($name) { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME)
}
//...
}
これはなぜ良くないのでしょうか? データベース接続パラメータがあまりにも多くの場所に出現します。これらのパラメータを定数として設定すると、それらのパラメータを一律に定義して値を割り当てることになります。はあまり適切ではありません:
コードをコピーします コードは次のとおりです:
class Product {
function getList() {
$db =& $this-> ;_getConnection() ;
//...
}
function &_getConnection() {
return new MysqlConnection(DB_USER, DB_PW, DB_NAME)
}
}
new MysqlConnection(DB_USER, DB_PW, DB_NAME); ) メソッドは _getConnection() メソッドに集中しました。