1

私はOOPの初心者です。私は手続き型プログラミングで多くの仕事をしてきました。だから私は今少し困っています。別のクラスのクラスのオブジェクトを呼び出す方法を教えてください。その後、そのオブジェクトを使用して、そのクラスのすべての変数と関数にアクセスできます。

例えば

DBconnection のクラスがあります。私はそれに自分のdbクエリを書きます。これで、Users という名前の別のクラスができました。ここで、User クラスの db クエリにアクセスする必要があります。すべての 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(){

        }


        }
4

6 に答える 6

0

DBConnectionへの参照をUserクラスに保持できます(コンストラクターに渡します)。

private $dbConn;

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

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

1。クラスDBConnectionをシングルトンに変更できます。そして、このようにUserでクラスを呼び出しますDBConnection::getInstance()->InsertRecord(...)。それは簡単です。ただし、お勧めしません。

2。DBConnectionインスタンスをUser内にプッシュできます。このような

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
**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

これを行う最善の方法は、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();
    }
}
于 2013-03-18T05:53:41.073 に答える
0

2番目のクラスでクラスのオブジェクトを宣言し、次のように使用できます

$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 に答える