0

これまでのページでは、ページのロジックを保持するために1つの接続クラスと1つのクラスを使用していました。ただし、発生する可能性のあるさまざまなシナリオに基づいて複数のクラスを使用する必要があるページができました。

これは私が仕事をすることができたものですが、それは悪い習慣のようです。探し回ったのですが、解決策が見つかりません。だから私の質問は、私がやろうとしていることのより良い方法は何ですか?

<?php
require 'class/connect.php';
$db = new Connect();
require 'class/normal-page.php';
require 'class/get-page.php';
?>

    <?php if (!isset($_GET['id'])) { ?>
        <?php $normalpage = new NormalPage($db); ?>
    <?php
        } else {
        $id = $_GET["id"];
        $getpage = new Getpage($id, $db);
    ?>

        <h1><?php echo $getpage->getTitle(); ?></h1>
        <p><?php echo $getpage->getDescription(); ?></p>
    <?php } ?>


class Normalpage {

    function __construct($db) {

        $query = 'SELECT something FROM table';
        $result = $db->query($query);
}
}

それが意味をなすのに十分な情報であることを願っています。つまり、connectクラスを含め、他の両方のクラスで変数を使用します。

4

1 に答える 1

3

これは、データベースオブジェクトを処理する適切な方法です。実際、これは依存性注入デザインパターンと呼ばれ、実際には非常に一般的です。コンストラクターパラメーターをメンバー変数に保存して、メンバー変数をとして宣言した場合$dbなど、他のクラスメソッドがデータベースにアクセスできるようにすることを検討してください。$this->dbprivate $db;

ただし、ページのクラスを整理するのに役立つため、ファクトリデザインパターンを検討することをお勧めします。上記のリンクからこの例を参照してください。

class Factory
{
    public static function build($type)
    {
        $class = 'Format' . $type;
        if (!class_exists($class)) {
            throw new Exception('Missing format class.');
        }
        return new $class;
    }
}

class FormatString {}
class FormatNumber {}

try {
    $string = Factory::build('String');
}
catch (Exception $e) {
    echo $e->getMessage();
}

try {
    $number = Factory::build('Number');
}
catch (Exception $e) {
    echo $e->getMessage();
}
于 2012-06-23T13:15:54.513 に答える