【问题标题】:Abstract class 'n Interface, specifically in PHP抽象类和接口,特别是在 PHP 中
【发布时间】:2010-12-13 18:42:06
【问题描述】:

这个问题是我之前的帖子here的延续。

由于无法在不编辑原始帖子的情况下再次发布代码示例,因此我正在开始新帖子。而且,它还包含 PHP 代码。

我正在写两个类,第一个是用于打开和关闭与数据库的连接,第二个是为数据库访问提供各种可重用的功能。

下面是我的 Connection 类的 PHP 代码:

<?php
/**
* DBConnection Base Class Definition
*/

/* Include dependency */
require_once("\config\dbconfig.php");

abstract class dbconnection 
{
 var $conn;
 //Opens connection for a MySQL DB
 abstract function OpenConnection()
 {
  $conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) 
     or die($this->ShowError(mysql_error()));
  mysql_select_db(DB_NAME) or die ($this->ShowError("Connection to MySQL Database Failed. "));  
 }
 
 //Closes connection for a MySQL DB
 abstract function CloseConnection()
 {
  try
  {
   mysql_close($conn);
  }
  catch(exception $ex)
  {
   $this->ShowError($ex);
  }
 }
 
 protected function ShowError($err)
 {
  echo "<script>alert('Error: ' +". $err .");</script>"; 
 }  
}
?>

上述代码中包含的文件包含以下代码:

<?php
//Modify constants with data needed to access your own database
define('DB_HOST','localhost:3306');
define('DB_NAME','MyStore');
define('DB_USER','super');
define('DB_PASSWORD','****');
?>

现在这里是我与抽象类和接口相关的查询(接我之前的帖子):

(1) 连接类可以是抽象的吗?方法写对了吗?
(2) 与其把第二段代码做成一个文件“dbconfig.php”,不如给它做一个Interface好吗?

【问题讨论】:

    标签: php oop interface abstract-class


    【解决方案1】:

    (1a) 是的

    (1b) 似乎是这样。但是你不应该在 OOP 中使用die,请使用exceptions

    (2) 一般来说,使用接口可能是更好的 OOP 风格。在这种情况下,对于 PHP,使用常量是完全可以的。但这是非常主观的。

    【讨论】:

      【解决方案2】:

      我看不出你应该将此方法标记为抽象的任何理由。这是可能的,但目的是什么?如果声明为抽象方法,则应在没有主体的情况下定义方法。如果你想强制一种连接方式,那么你最好定义一个接口并实现它。

      以这种方式将您的数据库配置定义为常量并不聪明。将它们作为参数提供可能会更好。这样,您可以更灵活地连接多个数据库。

      【讨论】:

        猜你喜欢
        • 2011-03-02
        • 2016-09-27
        • 1970-01-01
        • 2010-09-27
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2017-02-19
        相关资源
        最近更新 更多