用户PHP类(OOP)的逻辑问题

时间:2016-01-11 09:54:49

标签: php class oop object methods

今天我遇到了一个合乎逻辑的问题。

我有一个课程,可以向我提供用户的完整信息。我创建了一个方法,允许我恢复每个用户的所有数据,如何返回一个对象。

以下是方法:

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传递给我的方法,我可以得到用户)吗?

1 个答案:

答案 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连接产生可怕的影响