Aar*_*ron 2 php oop database-connection class
我是OOP的新手.最初我是在类中和构造函数之外定义变量并为它们赋值,但是在今天的Java课程中,我被告知这是一种糟糕的风格,应该避免.
这是我模拟的原始PHP数据库连接类:
class DatabaseConnection {
private $dbHost = "localhost";
private $dbUser = "root";
private $dbPass = "";
private $dbName = "test";
function __construct() {
$connection = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)
or die("Could not connect to the database:<br />" . mysql_error());
mysql_select_db($this->dbName, $connection)
or die("Database error:<br />" . mysql_error());
}
}
Run Code Online (Sandbox Code Playgroud)
以上认为可以吗?或者以下是更好的方法?
class DatabaseConnection {
private $dbHost;
private $dbUser;
private $dbPass;
private $dbName;
function __construct() {
$this->dbHost = "localhost";
$this->dbUser = "root";
$this->dbPass = "";
$this->dbName = "test";
$connection = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)
or die("Could not connect to the database:<br />" . mysql_error());
mysql_select_db($this->dbName, $connection)
or die("Database error:<br />" . mysql_error());
}
}
Run Code Online (Sandbox Code Playgroud)
我应该关注什么以确保我正确理解OOP?
好吧,它还没有运行.您需要更改变量,使它们与您的连接参数匹配:
$dbHost = "localhost";
Run Code Online (Sandbox Code Playgroud)
应该
$this->dbHost = 'localhost';
Run Code Online (Sandbox Code Playgroud)
我通常不会把我的登录参数放在课堂里.我会在创建对象时将它们传递给构造函数.使用外部配置文件,以便您可以在多个版本上实际使用此类.:)
更新::
好的,所以这里有一些小的OOP配置gold-nuggets可以帮助你构建一个动态的Database类.
查看http://redbeanphp.com/它将允许您进行伪造的ORM风格的数据建模.超级易于安装,并且非常容易使您的数据库正常运行.http://redbeanphp.com/manual/installing
在版本控制的环境中工作时,创建包含常量,模板设置,常用功能和AUTOLOADER配置文件等配置文件是关键.:)
建立你的数据库类为抽象类http://php.net/manual/en/language.oop5.abstract.php
abstract class Database
{
public function update()
{
}
public function deactivate()
{
}
public function destroy()
{
}
//etc.
}
class MyAppObject extends Database
{
}
Run Code Online (Sandbox Code Playgroud)将所有类文件放入库文件夹,然后将配置文件放入该库中.现在,为了让您的生活更轻松,您可以使用自动加载器功能,在您需要时将您的课程变为现实,而无需包含任何特定课程.见下文:
//note: this is never explicitly instantiated
//note: name your files like this: MyAppObject.class.php
function my_fancypants_autoloader( $my_class_name )
{
if( preg_match( "%^_(Model_)%", $my_class_name ) ) return;
require_once( "$my_class_name.class.php" );
}
spl_autoload_register( 'my_fancypants_autoloader' );
Run Code Online (Sandbox Code Playgroud)
希望指出你正确的方向!祝好运!
首先:这是毫无意义的.
您正在为10年以上的mysql_*功能创建一个对象包装器.不再维护此php扩展,并且已经开始弃用过程.您不应该在2012年将此API用于任何新项目.
相反,您应该学习如何使用PDO或MySQLi并使用预准备语句.
那说..让我们来看看你的代码:
$this->connection = mysql_conn....而是将它存储在局部变量中,在构造函数完成后您将"松散".private为一切使用变量.它们对于扩展原始类的类是不可见的.除非是故意的,否则你应该选择protected这个.or die('..')位最走.如果连接失败,请不要停止整个应用程序.相反,你应该抛出一个异常,然后可以在构造函数之外处理.| 归档时间: |
|
| 查看次数: |
28534 次 |
| 最近记录: |