簡體   English   中英

PHP-OOP返回對象或數組?

[英]PHP - OOP return objects or array?

我剛開始學習OOP,因為在處理較大的項目時,我通常的程序方法開始變得混亂。 我碰到了一些我不確定的事情。

這個想法只是將新成員添加到數據庫,然后從數據庫中提取現有成員的列表。

我在代碼中以及以下問題中添加了一些注釋。

class memberManager
{
    public $members;

    public function createMember($db, $array)   // Should I pass in an array or seperate items?
    {
        // Db code


    }

    public function getAllMembers($db)
    {
        // Should I return an array, then loop through in my script creating the "member" objects, or should I create and return them directly in this function?
        $dbconnection = $db->prepare("SELECT * FROM members");
        $dbconnection->execute();

        $x = 0;
        while ($row = $dbconnection->fetch())
        {
           $members[$x]['firstname'] = $row['firstname'];
           $members[$x]['lastname'] = $row['lastname'];
           $members[$x]['dob'] = $row['dob'];
           $x++;
        }

        return $members;

    }
}


class member
{
    public $firstname, $lastname, $dob;

    function __construct($details)
    {
        $this->firstname = $details['firstname'];
        $this->lastname = $details['lastname'];
        $this->dob = $details['dob'];
    }
}

會員制list.php的

$memberManager = new memberManager();
$membersList = $memberManager->getAllMembers($db);

foreach ($membersList as $existingMember)
{
   $member = new member($existingMember);
}
  1. 創建新成員時,應該傳遞數組還是單獨傳遞每個項? 我做數組的原因是它使我可以很容易地添加新參數,特別是如果我存儲有關成員的大量數據,而不是* function createMember($ db,$ firstname,$ lastname,$小球等)
  2. 在我的“ getAllMembers”函數中,因為它拉動每個成員,所以我應該像在這里一樣將它們放入數組中,然后在我的members-list.php中遍歷該數組以創建對象,或者我應該實例化member()類直接在“ getAllMembers”中,僅返回對象數組?

希望這是有道理的,只是為了突出問題而以一種偽代碼的方式編寫。

  1. 我將傳遞一個數組。 如您所說,添加新屬性更加容易。

  2. 我將返回一個對象數組,並且我將擁有一個成員實體,這將使使用屬性更加容易。 我的回答只是個人意見。

注意:這個問題可以有多個不同的答案,因為這將取決於開發人員的偏好

我知道我並沒有完全回答您的問題,但是對於基本的CRUD,我真的會推薦一些ORM框架。

關於您的問題,我認為在數組上使用單獨的實體類是一種方法-您犧牲了靈活性,但作為回報,您可以將實體特定的邏輯放在一個地方,這與DRY原理非常吻合。

另請注意,您的班級命名略有不同。 盡管PHP並沒有明確的任何命名約定,但對於類名, PascalCase卻被廣泛使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM