0

これを使用して:

$db = mysqli_connect
(
    $db_host,
    $db_user,
    $db_pwd
) or die ("FATAL ! : The server ".$db_host." is not responding to ".$db_user."!");

このクラスに$db値を取得する方法(インクルード "class.php" から) - エラーなし ;-)

class User
{
    public $db;
    public $id;

    public function getUser()
    {
        if($this->id)
        {
            $sql = "
            SELECT
                users.*
            FROM
                users
            WHERE
                users.u_id='".$this->id."'
            ";
            $res = mysqli_query($db, $sql) or die(mysqli_error($db));
            $user_row = mysqli_fetch_object($db, $res);
            return $user_row;
        }
        else
        {
            return false;
        }
    }
    } // end class User

私が得るのは - まあ、何もありません。メインページが空で読み込まれることを除いて...クラスの使用をやめれば、すべてうまくいきます(ユーザーのデータが表示されないことを除いて;-))

4

2 に答える 2

1

クラスをインスタンス化する必要があり、$this演算子を使用してクラス メンバーにアクセスする必要があります。さらに、構築と使用にパラメータを注入することをお勧めします。

class User
{
    private $db;

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

    public function getUser($id)
    {
        if($id)
        {
            $sql = "
            SELECT
                users.*
            FROM
                users
            WHERE
                users.u_id=" . (int)$id ;

            $res = mysqli_query($this->db, $sql) or die(mysqli_error($this->db));
            $user_row = mysqli_fetch_object($this->db, $res);
            return $user_row;
        }
        else
        {
            return false;
        }
    }
 }

使用法:

$user = new User($db);
$userdata = $user->getUser(2);
于 2012-10-31T18:05:36.973 に答える
0

クラス (User) をインスタンス化するときに、既に変数 ($db) を割り当てている場合は、次のことができます。

$user = new User;
$user->db = $db;
$user->getUser();

はい、かつクラス内でメソッドからクラスのプロパティを参照する場合は、$this表記法を使用します...つまり、に変更$dbします$this->db

それはうまくいくはずです。エラーの抑制について何か言及しましたが、それは別の問題です。あなたの目標が何であるかはわかりませんが、クラスのインスタンス化前の通常の例外処理で十分です。

于 2012-10-31T18:03:37.210 に答える