2012-12-16 17 views
3

PHP繼承我已經創建了一個名爲類數據庫。有關mysqli的

class Database extends mysqli { 

    public function __construct() { 
     parent::__construct(); 
     $mysqli = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBDATABASE); 

     if (mysqli_connect_errno()) { 
      printf("Connect failed: %s\n", mysqli_connect_error()); 
      exit(); 
     } 
    } 
} 

和延伸數據庫一類叫做型號

class Model { 

    function __construct() { 
     $this->db = new Database();   
    } 
} 

和延伸型

類registerModel
class registerModel extends Model { 

    public function __construct() { 
     echo "This is the register Model"; 
    } 

    public function register(//VARIOUS PASSED VALUES) { 
     **$stmt = $mysqli->prepare("INSERT INTO users (firstName, lastName) values (?, ?)");** 
     ... 
     ... More Code 
     ... 

    } 

我試圖做的是從原來獲得$mysqli數據庫類,但我不確定如何引用它。我嘗試了一切,但似乎沒有任何工作。

P.S. 我的應用程序中始終需要前兩個類,最後一個registerModel類是通過控制器調用的。這就是爲什麼我不在子類中構造父類的原因。

+1

訪問一個建議:不要創建'新類() '在構造函數中,將它們作爲外部參數傳遞。 –

回答

2

使它成爲一個領域的Database類中:

class Database extends mysqli { 
    public $mysqli; 

    public function __construct() { 
     parent::__construct(); 
     $this->mysqli = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBDATABASE); 

     if (mysqli_connect_errno()) { 
      printf("Connect failed: %s\n", mysqli_connect_error()); 
      exit(); 
     } 
    } 
}

然後,你可以參考它像這樣:

$stmt = $this->db->mysqli->prepare("INSERT INTO users (firstName, lastName) values (?, ?)");

但你也需要保持父類的構造:

echo "This is the register Model"; 
parent::__construct();

最後,您Database CL屁股不應延長mysqli因爲你不實際使用繼承;你正在創建一個完全不同的對象。

+0

這不會起作用,因爲'__construct'在'registerModel'將覆蓋'Database' – christopher

+0

@christopher的'__construct':是的,謝謝。正在修復:D – Ryan

+0

啊,我明白了。我將'$'變量標記放在了我不需要的地方。非常感謝您的幫助。 – AlexHeuman

1

在您的註冊模式,構造函數需要調用父類的構造

<?php 
class registerModel extends Model { 
public function __construct() { 
    echo "This is the register Model"; 
    parent::__construct(); 
} 

然後你就可以從

$this->db 
+0

這將起作用。它覆蓋了__construct,但是它調用了'parent :: __ construct()'來獲得變量'$ mysqli' – christopher

+0

非常感謝你,當我不應該有這樣的$ this - > $ db這樣的美元符號時。謝謝您的回答。 – AlexHeuman