【问题标题】:PHP - OOP return objects or array?PHP - OOP 返回对象或数组?
【发布时间】:2015-09-13 18:25:51
【问题描述】:

我刚刚开始学习 OOP,因为在处理大型项目时,我通常的程序方法开始变得混乱。我很早就遇到了一些我不确定的事情。

这个想法只是将新成员添加到数据库中,并从数据库中提取现有成员的列表。

我在我的代码中加入了一些 cmets 以及下面的问题。

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'];
    }
}

成员列表.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 上循环遍历该数组创建对象,或者我应该实例化该成员() 类直接在“getAllMembers”中,只返回一个对象数组?

希望这是有道理的,它以有点伪代码的方式编写只是为了突出问题。

【问题讨论】:

标签: php arrays oop object


【解决方案1】:
  1. 我将传递一个数组。正如您所说,添加新属性更容易。

  2. 我将返回一个对象数组,并且我将拥有一个成员实体,这样可以更轻松地使用属性。我的回答只是个人意见。

注意:这个问题可以有多个不同的答案,因为这取决于开发者的偏好

【讨论】:

  • 谢谢。如果只是开发人员的偏好,那很好,只是确保我没有通过尽早养成任何不良习惯而对 OOP 造成糟糕的开端!
【解决方案2】:

我知道我并没有完全回答你的问题,但对于基本的CRUD,我真的会推荐一些ORM 框架。

至于您的问题,我认为在数组上使用单独的实体类是可行的方法 - 您牺牲了灵活性,但作为回报,您可以将实体特定的逻辑保留在一个地方,这与 DRY principle 很相配。

还请注意,您的班级命名略有偏差。虽然 PHP 没有明确任何命名约定,但对于类名,PascalCase 最常用。

【讨论】:

  • 感谢您的回答,我将研究一些ORM框架。您能否解释一下将实体特定逻辑保存在一个地方是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多