在PHP OOP中继承数据库连接

时间:2010-05-13 14:13:00

标签: php oop static

我的抽象类数据库用于数据库交互,此类的任何(UserDatabase,ActionDatabase,EventDatabase)都继承其 >数据库连接,定义为 static

abstract class Database {  
    public static $connection;   
    public function __construct( ) {      
        ...  
        $this->connection = mysql_connect( $host, $username, $password );      
    }  
}     
class UserDatabase extends Database {  
    public function verify( ) {
        if ( $this->connection == parent::$connection ) {
            print "true";  
        } else {  
            print "false";  
            print "this:" . $this->connection . " parent:" . parent::$connection;  
        }  
    }    
}  
$instance = new UserDatabase( );  
$instance->verify( );  
// this prints false, as parent::$connection is empty

这是否意味着我的数据库连接只是设置并存储在内存中一次并作为参考传递给子类而不是为每个实例复制?

这是你如何实现OOP正确的数据库接口?

2 个答案:

答案 0 :(得分:2)

暂时忽略您的代码并仅查看您对此方案应如何工作的描述...是的,数据库连接只会为每个PHP脚本设置一次,并且不会为每个实例重复。

这是否是一个好主意取决于您的子类是什么。每个班级都应该承担一项责任。只要子类的唯一责任是数据库交互,你就可以了。 (查看存储库模式以获得有关如何执行此操作的说明。)如果您的User类扩展了Database以便它可以存储自己,那么您已经越过了一行并编写了具有太多依赖关系和职责的类。

至于你的代码......你的代码几乎每一行都是错误的。您无法将类变量初始化为函数的结果。你的SQL错了。行$connection ? "connected" : "not connected";什么都不做。几乎所有这些都不应该在构造函数中完成。等

答案 1 :(得分:1)

如果您对这些类没有其他任何操作,那么该模式就可以了,但数据库交互。

否则,您可能最好使用一次创建的Database类,每次都可以“getInstance()”。单身设计模式。

http://www.tonymarston.net/php-mysql/singleton.html