Php:如何扩展图书馆?

时间:2012-06-06 23:35:30

标签: php mysql

对于一个项目,我使用一个名为meekrodb的mysql库,我想用自己的mysql函数创建一个扩展类,所以如果更新了库,我只重新编辑扩展类。

作为一名初学程序员,我试图按照以下方式扩展库:

require './libs/meekrodb.2.0.class.php';
class Database_extend extends MeekroDB  {
protected $db;
protected $database='';

function __construct($server=null, $user=null, $pass=null, $database=null)
{   
    // Creating a database object

$this->db= parent::__construct();  
    //$this->db= parent::__construct($server,$user,$pass,$database);  
    $this->database=$database;

} */
 public function table_exists($tableName=null) {
 if(is_null($tableName )){ 
 trigger_error("Error in: ".__METHOD__." Missing table name.",E_USER_ERROR);     
 }
 else{
$sql = "SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = '$this->database' AND table_name = '$tableName'";
$exists=$this->db->query($sql);
if($exists['count']>0)
{  return TRUE;}
else { return FALSE;}
}  
}#-table_exists

如果我测试这个类(test.php)

 require './config.inc.php';
 require './libs/Session.php';
 require_once './libs/Ngram.class.php';   
 require_once './libs/Database_extend.class.php';
 /*require_once './libs/meekrodb.2.0.class.php';*/

 DB::$user=DB_USER;
 DB::$password=DB_PASS;
 DB::$dbName=DB_DATABASE;
 $db1=new Database_extend(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
 $t=$db1->query("SELECT * FROM temp LIMIT 0,1");
 //var_dump($t); //THIS WORKS
 var_dump($db1->table_exists('tem')); // THIS DOESN'T work

我得到一个'对非对象'错误调用成员函数查询(),这意味着db变量不是对象。

我该如何正确解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先想到的是你不会在这里传递初始化参数:

$this->db= parent::__construct();  

您的覆盖方法会收到$server, $user, $pass, $database,但您无法将其提供给原始代码。因此,为什么它无法正确设置$db属性。

您也会覆盖$this->db。但是父构造函数肯定会自己赋值。