我试图从方法中返回多个变量。
这是我到目前为止所尝试的:
此代码是类中的方法:
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;
}
这不起作用。
如何从类中的方法返回多个变量数组,以便在调用程序中使用?
答案 0 :(得分: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'];
在编写类似这样的东西时,这是我的偏好,因为我更喜欢有相关内容的数组,而不是一组自变量。但这都是首选。
答案 1 :(得分:1)
这类似于这个问题 - 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(){
.....
}
答案 2 :(得分: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;
}
答案 3 :(得分:0)
您可以创建一个类,例如UserInfo
,专门用于保存用户信息并返回该信息。
你也可以返回一个关联数组,例如......
$userInfo = array(
'id' => ...,
'thumb' => ...
);
第三种选择是使用引用,但在这种情况下,我建议远离它。