Intereting Posts

Возвращать несколько значений из метода в классе

Я пытаюсь вернуть несколько переменных из метода.

Это то, что я пробовал до сих пор:

Этот код является методом класса:

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' => ... ); 

Третья альтернатива – использовать ссылки, но в этом контексте я рекомендую держаться подальше от этого.