2013-03-18 99 views
1

我是面向對象的新手。我曾在程序編程方面做過很多工作。所以我現在有點麻煩了。你能告訴我如何在另一個類中調用一個類的對象,然後我可以使用該對象訪問該類的所有變量和函數。在另一個類中調用一個類的對象

例如

我有一類DB連接。我寫我的數據庫查詢。現在我有一個名爲Users的其他類。現在我需要訪問User類中的db查詢,當然我需要DBconnection類的對象來訪問所有db查詢。我能做些什麼,請幫助

我所編寫的示例代碼如下:

**DBConnection class** 

class DBConnection 
    { 
     public $SITEURL; 
     public $servername; 
     public $username; 
     public $password; 
     public $dbname; 
     public $objDbConnect; 

     function DBConnection(){ 
      $this->SITEURL=Configuration::SITEURL; 
      $this->servername=Configuration::servername; 
      $this->username=Configuration::username; 
      $this->password=Configuration::password; 
      $this->objDbConnect=mysql_connect($this->servername,$this->username,$this->password); 
       if($this->objDbConnect){ 
        mysql_select_db($this->dbname); 
       } 
      } 
    function InsertRecord($pStrTableName,$pArrField,$pArrValue) 
    { 

    $strSql="insert into $pStrTableName ("; 

    $intFieldSize=count($pArrField); 
    for($i=0;$i<$intFieldSize;$i++) 
    { 
     if($i==$intFieldSize-1) 
     { 
      $strSql.=$pArrField[$i]; 
     } 
     else 
     { 
      $strSql.=$pArrField[$i].","; 
     } 
    } 
    $strSql.=") values ("; 

    $intFieldSize=count($pArrValue); 
    for($i=0;$i<$intFieldSize;$i++) 
    { 
     if($i==$intFieldSize-1) 
     { 
      $strSql.="'".$pArrValue[$i]."'"; 
     } 
     else 
     { 
      $strSql.="'".$pArrValue[$i]."'".","; 
     } 
    } 
    $strSql.=")"; 
    if(mysql_query($strSql)) 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 

} 

} 

**Users class** 

class Users{ 

     var $username, 
      $userpassword, 
      $email, 


     function User(){ 

     } 


     } 

回答

0

做到這一點的最好方法是使用Singleton模式。 以下是一個示例

class DBConnection 
{ 
    private static $instance = null; 

    private function __construct() { 

    } 

    /* 
    * @return DBConnection 
    */ 
    public static function get_db() 
    { 
     if (empty(self::$instance)) self::$instance = new DBConnection(); 

     return self::$instance; 
    } 

    public function query() 
    { 

    } 
} 


class User 
{ 

    function testfunc() 
    { 
     $db = DBConnection::get_db(); 
     $db->query(); 
    } 
} 
0

您可以在第二類中聲明你的類的對象,並使用它像

$c= new DBConnection(); 
$c->InsertRecord('Parameters here etc'); 
echo $c->username; //and other public variables similarly 
+0

我可以在DBConnection類中聲明$ db = new DBConnection。所以如果我在Users類中包含DBConnection類,它將無法訪問函數和變量。 – user2009243 2013-03-18 05:26:12

+0

爲什麼不能,你可以與我們分享一些不起作用的代碼 – 2013-03-18 05:26:49

0

DBConnection的類

類DBConnection的 {

public $SITEURL; 
    public $servername; 
    public $username; 
    public $password; 
    public $dbname; 
    public $objDbConnect; 

    function DBConnection(){ 
     $this->SITEURL=Configuration::SITEURL; 
     $this->servername=Configuration::servername; 
     $this->username=Configuration::username; 
     $this->password=Configuration::password; 
     $this->objDbConnect=mysql_connect($this->servername,$this->username,$this->password); 
      if($this->objDbConnect){ 
       mysql_select_db($this->dbname); 
      } 
     } 
function InsertRecord($pStrTableName,$pArrField,$pArrValue) 
{ 

$strSql="insert into $pStrTableName ("; 

$intFieldSize=count($pArrField); 
for($i=0;$i<$intFieldSize;$i++) 
{ 
    if($i==$intFieldSize-1) 
    { 
     $strSql.=$pArrField[$i]; 
    } 
    else 
    { 
     $strSql.=$pArrField[$i].","; 
    } 
} 
$strSql.=") values ("; 

$intFieldSize=count($pArrValue); 
for($i=0;$i<$intFieldSize;$i++) 
{ 
    if($i==$intFieldSize-1) 
    { 
     $strSql.="'".$pArrValue[$i]."'"; 
    } 
    else 
    { 
     $strSql.="'".$pArrValue[$i]."'".","; 
    } 
} 
$strSql.=")"; 
if(mysql_query($strSql)) 
{ 
    return 1; 
} 
else 
{ 
    return 0; 
} 

}

}

用戶類

類用戶{

var $username; 
    var $userpassword; 
    var $email; 
    var $dbcon; 

public function __construct() 
{ 
    //create an object 
    $this->dbconn = new DBConnection(); 

    //get user name from dbconnection class 
    echo $this->dbconn->username; 

} 

    function User(){ 

    } 

}

//創建用於用戶類對象

$ user = new User();

0
**DBConnection class** 

class DBConnection 
    { 
     public $SITEURL; 
     public $servername; 
     public $username; 
     public $password; 
     public $dbname; 
     public $objDbConnect; 

     function DBConnection(){ 
      $this->SITEURL=Configuration::SITEURL; 
      $this->servername=Configuration::servername; 
      $this->username=Configuration::username; 
      $this->password=Configuration::password; 
      $this->objDbConnect=mysql_connect($this->servername,$this->username,$this->password); 
       if($this->objDbConnect){ 
        mysql_select_db($this->dbname); 
       } 
      } 

    public static function getConnection(){ 
     if(!empty($this)){ 
     return $this; 
     } 
     return new DBConnection(); 
    } 


    function InsertRecord($pStrTableName,$pArrField,$pArrValue) 
    { 

    $strSql="insert into $pStrTableName ("; 

    $intFieldSize=count($pArrField); 
    for($i=0;$i<$intFieldSize;$i++) 
    { 
     if($i==$intFieldSize-1) 
     { 
      $strSql.=$pArrField[$i]; 
     } 
     else 
     { 
      $strSql.=$pArrField[$i].","; 
     } 
    } 
    $strSql.=") values ("; 

    $intFieldSize=count($pArrValue); 
    for($i=0;$i<$intFieldSize;$i++) 
    { 
     if($i==$intFieldSize-1) 
     { 
      $strSql.="'".$pArrValue[$i]."'"; 
     } 
     else 
     { 
      $strSql.="'".$pArrValue[$i]."'".","; 
     } 
    } 
    $strSql.=")"; 
    if(mysql_query($strSql)) 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 

} 

} 

**Users class** 

class Users{ 

     var $username, 
      $userpassword, 
      $email, 


     function User(){ 
      $db = DBConnection::getConnection(); 
      $db->InsertRecord($x, $x, $x); 
     } 


     } 
0

1。您可以將您的班級DBConnection更改爲singleton。並在用戶中致電您的課程,如DBConnection::getInstance()->InsertRecord(...)。這很容易。但不推薦。

2。你可以在你的User內推送你的DBConnection實例。像這樣

class Users{ 
    var $db_connection; 

    function __construct($db_connection){ 
     $this->db_connection = $db_connection; 
    } 

$db_connection = new DBConnection(...); 
$user = new User($db_connection); 

3。您可以在User類中實例化新的DBCOnnection。就像在@Sundar答案中一樣。

P.S.請勿使用old construct style

0

您可以在您的User類中保留對DBConnection的引用(將其傳入構造函數中)。

private $dbConn; 

function __contruct($dbConnRef) { 
    $this->dbConn = $dbConnRef; 
} 

public function storeSelf() { 
    $this->dbConn->InsertRecord(...); 
}