2

目前,我正在创建一个脚本,该脚本将从传递给它的某种类型的报告中解析信息。脚本的一部分将从报告中提取学生信息并将其保存以供以后处理。

最好以类的形式保存,还是以数组变量的形式保存?我认为有 3 种方法可以使用。

编辑:真的,问题归结为任何一种方式是否具有任何性能优势?因为否则,每种方法实际上都与上一种方法相同。

作为一个可以直接访问变量的类:

class StudentInformation {

    public $studentID;
    public $firstName;
    public $lastName;
    public $middleName;
    public $programYear;
    public $timeGenerated;

    function StudentInformation(){} 
}

作为具有功能的类:

class StudentInformation {

    private $studentID;
    private $firstName;
    private $lastName;
    private $middleName;
    private $programYear;
    private $timeGenerated;

    function StudentInformation(){}

    public function setStudentID($id)
    {
        $this->studentID = $id;
    }

    public function getStudentID()
    {
        return $this->studentID;
    }

    public function setFirstName($fn)
    {
        $this->firstName = $fn;
    }

    /* etc, etc, etc */
}

或者作为一个以字符串为键的数组:

$studentInfo = array();
$studentInfo["idnumber"] = $whatever;
$studentInfo["firstname"] = $whatever;
$studentInfo["lastname"] = $whatever;
/* etc, etc, etc */
4

7 回答 7

3

您可以为单个学生创建一个班级,对单个学生进行适当的操作,例如更新成绩或获取全名(具有访问功能的私有数据成员)。然后为多个学生创建另一个包含单个学生数组的班级。您可以创建对学生集进行操作的函数,根据需要测试和调用单个学生函数。

高级别的答案是您可以按照您建议的任何方式执行此操作,但我们大多数人会推荐 OOP 解决方案。如果您的需求非常简单,一个简单的数组可能就足够了。如果您的需求发生变化,您可能不得不为对象重新编写整个代码。类也可以保持简单,所以我建议你从类开始,并根据需要增加复杂性。我相信从长远来看,它将通过类更好地维护和扩展。

于 2012-06-05T19:27:00.730 回答
3
  1. 尝试优化数组与简单值对象的使用可能是不必要的微优化。对于最简单的情况,数组更快,因为您没有构造new对象的开销。

  2. 记住这一点很重要:数组不是唯一存在的数据结构。如果您不需要散列功能,那么一旦您克服了对象创建的初始开销,一个简单的SplFixedArray文档将导致更低的内存开销和更快的迭代。如果您要存储大量数据,则上述固定数组或其他SPL 数据结构之一可能是更好的选择。

  3. 最后:值对象应该是不可变的,所以在你的情况下,我强烈推荐对象提供的封装,而不是随意分配哈希映射值的能力。如果您想要使用数组表示法的简单性,请让您的班级实现ArrayAccess文档并获得两全其美的效果。__get有些人会建议使用和的魔术 getter 和 setter __set。我不会,因为魔法通常会不必要地混淆你的代码。如果你真的需要魔法,你可能会重新考虑你的设计。

OOP 范式被认为是我们提出的最好的编程范式是有原因的——因为它是我们提出的最好的范式。你应该使用它。避免落入许多/大多数 PHP 开发人员的陷阱,他们对所有事情都使用数组。

于 2012-06-05T19:51:20.460 回答
1

关于您的性能问题,类可能比数组快,因为不同的实例是独立存储的。通过将所有东西放在一个巨大的哈希映射(关联数组)中,您还可以获得数组的一些限制/属性。例如,订购。你不需要那个。此外,如果 PHP 解释器不聪明,它会在您每次查找时散列您的查找字符串。使用不必要的类和静态类型。

于 2012-06-05T19:31:31.160 回答
1

这 3 个选项是有效的,但对外界的封装/保护程度不同。

从最低保护到最高:

  1. 大批
  2. 直接访问公共属性的对象
  3. 带有 getter/setter 的对象

选择很大程度上取决于您的项目环境(2 小时?明天发送到垃圾箱?)

选择 2 似乎很务实。

考虑到根据您的数据库包装器,可以将数据提取到数组或对象中。如果它是作为数组获取的,您可能必须将它们映射到对象。

于 2012-06-05T19:31:40.890 回答
0

这是一个没有明确答案的主观问题,但我会推荐 OOP 方式。您可以创建一个Parser包含StudentInformation.

它更加舒适,如果您需要一些额外的处理,您可以添加更多方法。

于 2012-06-05T19:22:30.013 回答
0

如果您只编写一个没有很多功能的小项目,则数组会更好。但是,类有其优势。例如,您愿意键入

$class->db_update("string", $database);

或者

$query = "SELECT * FROM `table` WHERE foo='".$array['bar'].'";
mysql_connect("...
mysql_query($query...

基本上,每一方都有自己的优势。我会推荐 OOP 方式,就像这里的大多数其他人应该并且愿意一样。

编辑:另外,看看这个。

于 2012-06-05T19:27:50.510 回答
0

我会去上课,属性是私有的。

任何与学生信息有关的操作都可以/应该在该类中创建。

如果这是一次性的事情,我会选择数组,但实际上,我知道拥有只使用一次的东西意味着什么,然后发现我需要对数据执行 n 个操作,并且最终不得不去上课。

于 2012-06-05T19:31:31.187 回答