1

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

例如

我有一类 DBconnection。我在里面写了我的数据库查询。现在我有另一个名为用户的类。现在我需要访问 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(){

        }


        }
4

6 回答 6

0

你可以在你的第二个类中声明你的类的一个对象并像使用它一样使用它

$c= new DBConnection();
$c->InsertRecord('Parameters here etc');
echo $c->username; //and other public variables similarly 
于 2013-03-18T05:24:10.833 回答
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 = 新用户();

于 2013-03-18T05:27:07.200 回答
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);
        }


        }
于 2013-03-18T05:29:43.373 回答
0

1. 您可以将您的类 DBConnection 更改为singleton。并像这样在 User 中调用您的课程DBConnection::getInstance()->InsertRecord(...)。这简单。但不推荐。

2. 您可以将您的 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 的回答一样。

PS 不要使用旧的构造样式

于 2013-03-18T05:34:04.633 回答
0

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

private $dbConn;

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

public function storeSelf() {
    $this->dbConn->InsertRecord(...);
}
于 2013-03-18T05:45:12.593 回答
0

最好的方法是使用单例模式。下面是一个例子

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();
    }
}
于 2013-03-18T05:53:41.073 回答