Я пытаюсь вернуть несколько переменных из метода.
Это то, что я пробовал до сих пор:
Этот код является методом класса:
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' => ... );
Третья альтернатива – использовать ссылки, но в этом контексте я рекомендую держаться подальше от этого.