今天我遇到了一个合乎逻辑的问题。
我有一个课程,可以向我提供用户的完整信息。我创建了一个方法,允许我恢复每个用户的所有数据,如何返回一个对象。
以下是方法:
public static function getAllUsers(&$rUsersData = null, $sArgs = null) {
// Nouvelle connexion à la base de données
self::$oDatabase = new cMySQLi(DB_USERNAME, DB_PASSWORD, DB_HOSTNAME, DB_HOSTPORT, DB_DATABASE);
// Si on ne passe pas de ressource en paramètre
if(is_null($rUsersData)) {
// Récupère les données de tout les users, actifs ou non
$sReqSelectAllUsers = ' SELECT
*
FROM
'.self::$sTableName.(is_null($sArgs) ? ' '.$sArgs.' ' : null).'
ORDER BY
'.self::$sFieldFirstname.' ASC';
// Exécute la requête
$rUsersData = self::$oDatabase->Query($sReqSelectAllUsers);
}
// Associe les données dans un tableau associatif à 2 dimensions
$aUsersData = self::$oDatabase->Assoc($rUsersData);
// Parcours chaque utilisateurs
while($aData = $aUsersData) {
// Retourne un objet avec les données de l'user
return new cUser($aData[self::$sFieldId]);
}
}
这是我用来恢复所有数据的电话:
while($aUser = cUser::getAllUsers()) {
print_r($aUser);
}
这是我的cMySQLi类,如果它也可以帮助你:https://github.com/SatanicGeek/S.A.V-Team-Manager/blob/master/www/classes/mysqli.class.php
你能帮我解决方法调用中没有任何参数的所有用户(如果我将sql ressource传递给我的方法,我可以得到用户)吗?
答案 0 :(得分:1)
在getAllUsers()
方法中,你有一个返回的while循环;这只会返回一个用户(返回退出循环和功能,将值返回给调用者)。
由于您要返回所有用户的数组,而是使用代码类似:
$listOfUsers = [];
foreach($aUsersData as $aData) {
$listOfUsers[] = new cUser($aData);
}
return $listOfUsers;
这样,当您调用代码时,您将拥有一组用户对象,而不仅仅是一个用户对象。
例如,要调用此方法,您现在将使用以下代码:
$allUsers = cUser::getAllUsers();
foreach($allUsers as $user) {
print_r($user);
}
从技术上讲,这可以通过使用yield
并将getAllUsers()作为生成器来解决,但这会对MySQL连接产生可怕的影响