0

在到目前为止的页面中,我使用了一个连接类和一个类来保存页面的逻辑。但是,我现在有一个页面,我需要根据可能发生的不同场景使用多个类。

这是我能够完成的工作,但这似乎是不好的做法。我四处寻找,但找不到解决方案。所以我的问题是,什么是我正在尝试做的更好的方法。

<?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);
}
}

希望这些信息足够有意义。所以简而言之,我包括连接类并在其他两个类中使用该变量。

4

1 回答 1

3

这是处理数据库对象的正确方法。事实上,它被称为依赖注入设计模式,实际上是相当普遍的。您可能需要考虑将构造函数参数保存$db到成员变量中,以便其他类方法可以通过$this->db将成员变量声明为private $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 回答