在另一个类中调用类的对象

时间:2013-03-18 05:20:34

标签: php mysql

我是OOP的新手。我在程序编程方面做了很多工作。所以我现在很麻烦。你能告诉我如何在另一个类中调用类的对象,然后我可以使用该对象访问该类的所有变量和函数。

例如

我有一类DBconnection。我在其中编写我的数据库查询。现在我有一个名为Users的其他类。现在我需要访问User类中的db查询,我肯定需要DBconnection类的对象来访问所有数据库查询。我该怎么办请帮助

我写的示例代码如下:

**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(){

        }


        }

6 个答案:

答案 0 :(得分:0)

您可以在第二堂课中声明班级的对象,并像

一样使用它
$c= new DBConnection();
$c->InsertRecord('Parameters here etc');
echo $c->username; //and other public variables similarly 

答案 1 :(得分: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();

答案 2 :(得分: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);
        }


        }

答案 3 :(得分: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

答案 4 :(得分:0)

您可以在User类中保留对DBConnection的引用(在构造函数中传递它)。

private $dbConn;

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

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

答案 5 :(得分: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();
    }
}