2

ホストectを変数として取るphpでdbクラスを作成しようとしています。初期化された値を保持することができず、その理由がわかりません。それらをパブリックに設定した上部で初期化すると正常に動作しますが、コンストラクターで初期化しようとすると動作しません。

    class Database {

    public $dbHost;
    public $dbUser;
    public $dbPass;
    public $dbName;

    public $db;

    public function __construct($Host, $User, $Pass, $Name){ 
        $dbHost = $Host;
        $dbUser = $User;
        $dbPass = $Pass;
        $dbName = $Name;
        $this->dbConnect();
    }

    public function dbConnect(){
        echo $dbPass;
        $this->db = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);

        /* check connection */
        if (mysqli_connect_errno()){
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }else{
            //echo 'connection made';
        }
    }
4

5 に答える 5

6

コンストラクターでそれらを適切に初期化していません。試す:

$this->dbHost = $Host;

現在行っていることは、$dbHost という名前のローカル変数を初期化することです。この変数のスコープは、コンストラクター関数そのものです。

于 2012-10-23T18:04:43.620 に答える
2

$thisクラス内のインスタンス変数にアクセスするために使用する必要があります。$this->dbHost = $Host;

于 2012-10-23T18:05:30.250 に答える
2

これを変える:

public function __construct($Host, $User, $Pass, $Name){ 
        $dbHost = $Host;
        $dbUser = $User;
        $dbPass = $Pass;
        $dbName = $Name;
        $this->dbConnect();
    }

これに:

public function __construct($Host, $User, $Pass, $Name){ 
        $this->dbHost = $Host;
        $this->dbUser = $User;
        $this->dbPass = $Pass;
        $this->dbName = $Name;
        $this->dbConnect();
    }
于 2012-10-23T18:05:52.243 に答える
1

これを試して:

public function __construct($Host, $User, $Pass, $Name){ 
        $this->dbHost = $Host;
        $this->dbUser = $User;
        $this->dbPass = $Pass;
        $this->dbName = $Name;
        $this->dbConnect();
    }
于 2012-10-23T18:06:30.037 に答える
0

これを使ってみてはどうですか->

public function __construct($Host, $User, $Pass, $Name){ 
    $this->dbHost = $Host;
    $this->dbUser = $User;
    $this->dbPass = $Pass;
    $this->dbName = $Name;
    $this->dbConnect();
}
于 2012-10-23T18:05:52.960 に答える