本文共 1857 字,大约阅读时间需要 6 分钟。
我正在编写一个PHP脚本,用于将主题从旧论坛站点迁移到新论坛站点.
>旧论坛网站使用数据库“old_forums”
> Thew新论坛网站使用数据库“new_forums”
> MySQL用户“论坛”拥有两个数据库的所有权限(为方便起见,我使用的是单个用户,但如果需要,我会使用2个不同的用户时遇到任何问题)
我有两个论坛托管在同一主机 – localhost
脚本我有以下结构
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
}
}
您可以将导入和导出方法提取到他们自己的类中,然后使用某种Composite Command Pattern,但这实际上取决于您需要的模块化程度.
标签:php,mysql,mysqli
来源: https://codeday.me/bug/20190629/1330743.html
转载地址:http://gkhhp.baihongyu.com/