博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php mysql 继承,重用MySQL连接PHP对象继承
阅读量:4964 次
发布时间:2019-06-12

本文共 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/

你可能感兴趣的文章
linux中configure文件默认执行结果所在位置
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
iTextSharp带中文转换出来的PDF文档显示乱码
查看>>
组件:slot插槽
查看>>
走进C++程序世界------异常处理
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
利用sed把一行的文本文件改成每句一行
查看>>