从类中的方法返回多个值


Return multiple values from a method in a class

我正在尝试从方法返回多个变量。

这是我到目前为止尝试过的:

此代码是类中的方法:

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;
    }

这行不通。

如何从类中的方法返回多个变量的数组,以便在调用程序中使用?

您在类中定义的方法与您调用的方法不匹配。

// 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'];

在编写这样的东西时,这将是我的偏好,因为我更喜欢为相关事物使用数组,而不是一组自变量。但这都是偏好。

这类似于这个问题 - PHP:是否可以从一个函数返回多个值?

你也可以看看这里。 他们解释了返回多个值的方法 - http://php.net/manual/en/functions.returning-values.php

我注意到的一件事是,在这一行中

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

您在此处传递了 2 个参数,但在函数定义部分中您没有参数 -

 public function getUserInfo(){
  .....
  } 
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;
}

您可以创建一个类,例如,UserInfo ,专门用于保存用户信息并返回该类。

您还可以返回一个关联数组,例如...

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

第三种选择是使用引用,但在这种情况下,我建议远离它。