【问题标题】:Return multiple values from a method in a class从类中的方法返回多个值
【发布时间】:2012-07-04 09:19:48
【问题描述】:

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

这是我迄今为止尝试过的:

这段代码是类中的方法:

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;

    }

这不起作用。

如何从类中的方法返回一个包含多个变量的数组以供调用程序使用?

【问题讨论】:

    标签: php arrays oop methods return


    【解决方案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);
    }
    return $return;
    }
    

    【讨论】:

    • 这并不能解决任何问题,方法定义完全没问题。
    【解决方案2】:

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

    你也可以返回一个关联数组,例如...

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

    第三种选择是使用引用,但在这种情况下,我建议不要这样做。

    【讨论】:

    • 先生。忍者声誉下降选民,请澄清,以便我可以改进我的答案。
    【解决方案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'];
    

    在编写这样的代码时,这将是我的偏好,因为我更喜欢为相关事物创建一个数组,而不是一组自变量。但这都是偏好。

    【讨论】:

    • 我尝试了您的第二个选项,但它只返回用户 ID。这是我目前的代码:pastebin.com/yB5dmLjL
    • print_r 显示以下内容:Array ( [loggedin] => 1 [password] => [id] => 1 [thumb] => )
    • @cement 如果它没有出现,你应该检查你的数据库并确保在那里设置了值。你的代码在我看来是正确的。
    【解决方案4】:

    这类似于这个问题-PHP: Is it possible to return multiple values from a function?

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

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

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

    你在这里传递了 2 个参数,但在函数定义部分你没有参数 -

     public function getUserInfo(){
      .....
      } 
    

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2013-02-12
      • 2012-01-19
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多