[英]Reuse MySQL connection PHP object inheritance
我正在编写一个PHP脚本,用于将主题从旧论坛站点迁移到新论坛站点。
我有两个论坛托管在同一主机 - localhost
脚本我有以下结构
<?php
class Forum {
//constants
const HOST = "localhost";
const DB_USER = "forums";
const DB_PASS = "forums";
...
//properties e.g. topic title, topic content
}
class OldForum extends Forum {
const DB_NAME_OLD = "old_forums";
public static function exportTopics() {
//some code
}
}
class NewForum extends Forum {
const DB_NAME_NEW = "new_forums";
public static function importTopics() {
//some code
}
}
OldForum::exportTopics();
NewForum::importTopics();
?>
我知道我在这里混合了程序和面向对象编程PHP(OOPP)。 我是面向对象PHP的新手,但是(我有Java经验,所以我非常愿意接受一些指导来制作这个纯粹的OOPP)
我想为OldForum和NewForum类提供1个单独的MySQL连接。
我应该在哪里实例化mysqli对象?
例如,在Forum类的构造函数中,或者将一个新的mysqli对象作为类Forum的属性
这样我就可以创建一个新的Forum对象来启动MySQL连接
$a_forum = new Forum();
通过在引导程序文件中创建一次,然后将其传递给需要它的实例,mysqli连接很容易在实例之间共享,例如
$mysqli = new mysqli(/* connection params */);
$someClassUsingMySqli = new SomeClassUsingMySqli($mysqli);
$anotherClassUsingMySqli= new AnotherClassUsingMySqli($mysqli);
这将有效地限制连接到一个,你不需要求助于对象内的全局变量。 这称为依赖注入,应该是您为对象分配依赖关系的首选方式。 它使依赖关系明确且易于更换,从而有利于变更,测试和维护。
至于你的导入和导出任务,我想知道你为什么要在PHP中这样做。 它显然是相同的数据库服务器,因此您可以在MySql实例中执行此操作。 如果你想用PHP做,我可能会做这样的事情:
class MigrateForum
{
private $dbConnector;
public function __construct(DBConnector $dbConnector)
{
$this->dbConnector = $dbConnector;
}
public function migrate()
{
// orchestrate the migration (consider transactions)
$this->exportOldForum();
$this->importNewForum();
}
private function exportOldForum()
{
// code to export old_database_name.table_name
}
private function importOldForum()
{
// code to import new_database_name.table_name
}
}
不同的方法是在new_forums数据库中创建指向old_forum数据库的一些VIEW
。 在这种情况下,所有“视图”可能都有,例如,“old_”前缀? 与此类似的东西:
CREATE VIEW old_tbl_name AS
SELECT *
FROM old_forum.tbl_name
在这种情况下,您只有一个连接到一个数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.