1

メソッドから複数の変数を返そうとしています。

これは私がこれまでに試したことです:

このコードは、クラスのメソッドです。

public function getUserInfo(){
$stmt = $this->dbh->prepare("SELECT user_id FROM oopforum_users WHERE username = ?");
$stmt->bindParam(1, $this->post_data['username']);
$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

$user_id = $row['user_id'];
$thumb = $row['thumbnail'];
}
return array($user_id, $thumb);
}

呼び出しプログラムで使用するために、各変数をリストに配置しようとします。

session_start();
require_once('init.php');

$username = trim($_POST['username']);
// create a new object
$login = new Auth($_POST, $dbh);

    if($login->validateLogin()){

        $_SESSION['loggedin'] = true;
        list($user_id, $thumb) = $login->getUserInfo($user_id, $thumb);
        echo $user_id . ' ' . $thumb;

    }

これはうまくいきませんでした。

呼び出しプログラムで使用するために、クラス内のメソッドから複数の変数の配列を返すにはどうすればよいですか?

4

4 に答える 4

3

クラスで定義したメソッドが、呼び出しているものと一致しません。

// In the class, you have:
getUserInfo();

// But you call this:
getUserInfo($user_id, $thumb);

このため、PHP は別のメソッドを呼び出していると判断し、何も返さない (少なくともここでは役に立たない)。

呼び出しは次のようになります。

list($user_id, $thumb) = $login->getUserInfo(); //Note that there are no parameters.


別のオプション

他に注目すべきは、連想配列の使用です。次のようになります。

//In the class:
public function getUserInfo() {
  ...
  return array(
    'id'    => $user_id,
    'thumb' => $thumb
  );
}

//And then for your call:
$user = $login->getUserInfo();

echo $user['id'].' '.$user['thumb'];

このようなものをコーディングするときは、独立変数のセットではなく、関連するものに配列を使用することを好むので、これが私の好みです。しかし、それはすべて好みです。

于 2012-07-03T21:41:09.797 に答える
1

これは、この質問に似ています- PHP: Is it possible to return multiple values from a function?

こちらからもご覧いただけます。複数の値を返す方法について説明している場所 - http://php.net/manual/en/functions.returning-values.php

私が気づいたことの1つは、この行で

list($user_id, $thumb) = $login->getUserInfo($user_id, $thumb);

ここでは2つのパラメーターを渡していますが、関数定義部分にはパラメーターがありません-

 public function getUserInfo(){
  .....
  } 
于 2012-07-03T21:41:20.670 に答える
0
public function getUserInfo(){
$stmt = $this->dbh->prepare("SELECT user_id FROM oopforum_users WHERE username = ?");
$stmt->bindParam(1, $this->post_data['username']);
$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

    $user_id = $row['user_id'];
    $thumb = $row['thumbnail'];
    $return[] = array($user_id, $thumb);
}
return $return;
}
于 2012-07-03T21:30:51.350 に答える
0

たとえば、特にユーザー情報を保持するためのクラスを作成し、UserInfoそれを返すことができます。

連想配列を返すこともできます。

$userInfo = array(
    'id' => ...,
    'thumb' => ...
);

3 番目の選択肢は参照を使用することですが、このコンテキストでは参照を使用しないことをお勧めします。

于 2012-07-03T21:31:41.020 に答える