【问题标题】:Logic problems with a User PHP Class (OOP)用户 PHP 类 (OOP) 的逻辑问题
【发布时间】:2016-04-15 13:57:26
【问题描述】:

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

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

方法如下:

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 资源传递给我的方法,我可以获取用户)?

【问题讨论】:

    标签: php class oop object methods


    【解决方案1】:

    在您的getAllUsers() 方法中,您有一个返回的while 循环;这只会返回一个用户(return 退出循环 & 函数,将值返回给调用者)。

    由于您要返回所有用户的数组,因此请使用与此类似的代码:

    $listOfUsers = [];
    
    foreach($aUsersData as $aData) {
      $listOfUsers[] = new cUser($aData);
    }
    return $listOfUsers;
    

    这样,当您调用代码时,您将拥有一个用户对象数组,而不仅仅是一个用户对象。

    例如要调用此方法,您现在可以使用如下代码:

    $allUsers = cUser::getAllUsers();
    foreach($allUsers as $user) {
      print_r($user);
    }
    

    从技术上讲,这可以通过使用 yield 并将 getAllUsers() 作为生成器来解决,但这会对 MySQL 连接产生可怕的影响

    【讨论】:

    • 有可能,但这不是我想要的。我正在使用 PHP 进行培训。谢谢。
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多