PHP-mySQL数据库类 我看到了C++中的强大的OOP,所以我开始在PHP上读OOP。这让我想改造我的一个网站,这样它就可以使用OOP PHP来清理它现在所处的混乱局面。我已经知道OOP的基本概念,但我在应用它方面有点困难
到目前为止,我看到的所有使用OOP PHP的站点都有某种mySQL DB类。我可以肯定地看到它的好处(当你想访问数据库中的东西时,代码更干净),但我不完全确定如何设置我的。我想知道的是:PHP-mySQL数据库类 我看到了C++中的强大的OOP,所以我开始在PHP上读OOP。这让我想改造我的一个网站,这样它就可以使用OOP PHP来清理它现在所处的混乱局面。我已经知道OOP的基本概念,但我在应用它方面有点困难,php,mysql,oop,class,Php,Mysql,Oop,Class,到目前为止,我看到的所有使用OOP PHP的站点都有某种mySQL DB类。我可以肯定地看到它的好处(当你想访问数据库中的东西时,代码更干净),但我不完全确定如何设置我的。我想知道的是: 我应该做的第一件事是什么 从 磨碎?(这门课该怎么办 设置?背后的想法是什么 结构?它看起来像什么 什么时候会这样 在我的生活中应该有什么样的方法 DB类?(什么样的功能 我的DB类应该提供SQL吗 插入?SQL更新?普通ole'SQL 查询?这些数据应该是什么 方法返回?) 如何确定何时需要添加 一个新的课
- 我应该做的第一件事是什么
从
磨碎?(这门课该怎么办 设置?背后的想法是什么 结构?它看起来像什么 什么时候会这样 - 在我的生活中应该有什么样的方法 DB类?(什么样的功能 我的DB类应该提供SQL吗 插入?SQL更新?普通ole'SQL 查询?这些数据应该是什么 方法返回?)
- 如何确定何时需要添加 一个新的课堂教学方法
- 我应该如何在其他代码中使用这些方法
谢谢 如果您指的是连接到数据库、准备并运行查询的类,请使用(教程中的“try”)。如果您指的是一个(DAO),它是一个(或多个)类,可以作为一个和您的应用程序对象来使用,请尝试或模式。请注意,活动记录模式有点旧,有些人不喜欢它,因此关于PHP中活动记录的文章往往比较旧,有点过时 无论应用何种模式,类应该提供的四个基本操作是(CRUD)。创建和读取返回应用程序对象,更新和删除可以返回指示成功或失败的值 使用类非常简单:每当需要对象时,使用create或read而不是对象构造函数。何时使用更新或删除取决于您的业务逻辑。例如,您可能需要在处理对象时进行更新(即,当对象被销毁时)。更棘手的是对象或函数如何获得对DAOs的引用。阅读Martin Fowler关于几种不同方法的文章 进一步阅读:
$Connection = new DatabaseConnectionDetails(array(
"hostname" => "localhost",
"username" => "root",
"password" => "n/a",
"charset" => "UTF-8",
"database" => "my_database",
"driver" => "MySQL",
));
$Database = Database::getInstnace($Connection);
$Query = $Database->Query("SELECT * FROM {?:table} WHERE id = {?:id}",array(
"table" => "posts",
"id" => 22
));
if($Query->Execute())
{
$Results = $Query->GetResults();
foreach($Results as $Result)
{
echo $Result->data; //trims, converts to int, returns;
}
}
这就是我希望连接到数据库的方式,所以这就是我开始使用基类的方式
class Database
{
private static $_DBInstance;
public static function getInstance(IDatabaseConnectionDetails $ConnectionDetails)
{
if(self::$_DBInstance === null)
{
self::$_DBInstance = new Database($ConnectionDetails);
}
return self::$_DBInstance;
}
public function __construct(IDatabaseConnectionDetails $ConnectionDetails)
{
//We will come back to this.
}
}
查看上面的类,您将看到,首先它有一个create实例(singleton),有助于在任何应用程序中使用数据库,您还将注意到,im专门定义了所需的参数
在整个抽象层中将上述因素保持在适当的位置将使生活更加轻松
让我来解释一下目录结构,您必须将下面的类分开
- 数据库
- 查询类
- 接口
- 司机
- 助手
- 包括
- DBAL
- Database.class.php
- DatabaseConnectionDetails.class.php
- 司机
- 接口
- 结果
- DBAL
IDatabaseConnectionDetails
接口,其目的是分离凭证和主数据库,因此IDatabaseConnectionDetails
主要负责查看用户凭证
class DatabaseConnectionDetails implements IDatabaseConnectionDetails
{
public $hostname = "localhost";
public $username = "";
public $password = "";
public $charset = "UTF-8";
public $driver = "mysqli";
public function __construct($params)
{
//Set Params here
}
}
上面提到了为配置创建类的美妙之处,即类的可扩展性,例如:
class MyCustomConfig extends DatabaseConnectionDetails
{
public $hostname = "host.domain.tld";
public $username = "my_other_user";
public $password = "IJH87b&OTIT8fh";
public $driver = "mssql";
}
通过这种方式,当类被接口时,您可以将任何类发送到主数据库对象中,无论是自定义的还是非自定义的,因为接口允许您进行扩展
现在,对于所需的驱动程序,您应该注意每个驱动程序都应该是
interface IDatabaseDriver
{
public function setConnectionDetails(IDatabaseConnectionDetails $ConnectionDetails);
public function connect();
public function escape($string);
public function query($string);
/*
all the methods here that will allow the main class can access, such as:
- next()
- prev()
- reset()
ect ect
*/
}