如何在PHP中创建一个对象列表或数组?

15

我是一名 .net 程序员,擅长 VB 和 C#,但我似乎无法弄清如何在 PHP 中将我的对象放入列表或数组中。

var mylist = new List<myobject>();

mylist.add(myobject1);
mylist.add(myobject2);

我的尝试方法。
将“产品”设置为“订单项”收集的属性:

$this->Products = getOrderItems();

public function getOrderItems()
{
    $items = array();
    $count = 0;

      // connect to db, query.....

    while($row = mysql_fetch_array($result, MYSQL_BOTH)){
        $count++;
        $items[$count] = ($row);
    }
    echo 'Count of Order Items...' . $count;

    return $items;
}

我接近了吗?

3个回答

16
$items = array();

while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
    $items[] = $row;
}
echo 'Count of Order Items...', count($items);

这会为每个获取的行递增,因此最终所有行都在$items中吗? - OneSmartGuy
看起来我在使用 $this->Products = getOrderItems(); 时遇到了问题。这在 PHP 中合法吗? - OneSmartGuy
这取决于$this是什么以及它是否具有$Products变量。 - Nicholas

6
  • $this->Products = getOrderItems(); 在PHP中是合法的,但它指的是全局函数getOrderItems()而不是类方法。当在类内部调用类方法和变量时,必须始终加上$this->前缀(或者如果它们是静态变量,则使用self::)。在您的示例代码中,这个地方是错误的。虽然getOrderItems被定义为类方法,但是你的调用没有使用$this->作用域,因此php认为它是一个函数。它应该会抛出一个“function not found”错误。

  • [] 符号会将元素添加到数组的末尾。

  • 在你的示例代码中,第一个元素的索引是1(这不是VB的标准情况吗?)。PHP通常从0开始 - 虽然可能(因为PHP数组不是真正的数组)从任意索引开始,但我建议坚持使用零。

  • mysql_fetch_array 是使用mysql的一种古老的方式。现在最好使用mysqli或(更好的)PDO。

  • (...) php中的列表或数组。

    列表、数组、堆栈,无论什么:在php中,一切都是有序映射(被误导性地称为数组):

    PHP: Arrays:在PHP中,数组实际上是一个有序的映射。映射是一种将值与键关联的类型。这种类型针对多种不同的用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的一种实现)、字典、集合、堆栈、队列,可能还有更多。由于数组值可以是其他数组,因此也可以使用树和多维数组。

更新:

抱歉,我现在没有足够的时间来解释pdo/mysqli相对于mysql的微妙差别。

所以这里只介绍基础知识:

  • 面向对象编程: pdo 和 mysqli 是面向对象的(虽然 mysqli 有函数别名)

  • 预处理语句: 最重要的是:pdo/mysqli 支持预处理语句。这意味着,你需要先准备一个带占位符的查询语句,然后稍后再填充值(无需再次准备查询语句)。这种方法有三个明显的优点:

    • 性能: 更快,因为数据库只需要分析、编译和优化查询一次 (至少对于复杂查询)

    • 安全性: 不需要引用字符串(自动完成!),使 SQL 注入攻击更加困难

    • 可维护性: 查询的逻辑和数据部分被分开,因此更易于阅读,无需进行大量的字符串拼接

  • 驱动驱动: pdo 不特定于任何数据库。支持多个数据库系统,使得将代码移植到其他数据库后端更容易 (但它不像 ODBC 那样是一个数据库抽象层,因此 SQL 仍然必须兼容),并增加了可重用性

当然,这只是冰山一角。


+1非常好的答案。涵盖了问题中的示例,也涵盖了PHP内部。 - knittl
哇,太棒了,伙计!那你能详细说明一下mysqli和PDO吗? - OneSmartGuy

1

orlandu63所发的帖子是正确的 - 使用$items[] = $row意味着$row会被追加为$items的下一个元素。

另一个选项是,如果$row中有一个id字段,您可以使用$items[$row->id] = $row;,这样可以索引您的数组并更容易地找到给定的项目。

我真的建议阅读http://www.php.net/manual/en/language.types.array.php,这将向您解释PHP允许使用数组的一些很酷的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接