在目前为止的页面中,我使用了一个连接类和一个类来保存页面的逻辑。但是,我现在有一个页面,我需要根据可能发生的不同场景使用多个类。
这是我能够做的工作,但这似乎是不好的做法。我一直在搜索,但找不到解决方案。所以我的问题是,我正在尝试做什么更好的方式。
<?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);
}
}
希望足够的信息有意义。简而言之,我包含了连接类,并在其他类中使用该变量。
答案 0 :(得分:3)
这是处理数据库对象的正确方法。事实上,它被称为dependency injection设计模式,实际上很常见。您可能需要考虑将构造函数参数$db
保存到成员变量,以便其他类方法可以通过类似$this->db
的方式访问数据库(如果您将成员变量声明为private $db;
)。
但是,您可能需要考虑factory设计模式,因为它有助于组织页面的类。请参阅以上链接中的此示例:
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();
}