如何在 php 中创建类似 javascript 的对象

How to create javascript like object in php

比方说,我有一个 javascript 对象数组,如下所示。

    let users = [
        {
            'id' => 1,
            'name' => 'John',
            'amount' => 1000,
        },
        {
            'id' => 2,
            'name' => 'Smith',
            'amount' => 2000,
        },
    ];

现在如何在 PHP 中创建相同的对象并进行 CRUD 操作?

注意:我知道应该是 : 而不是 =>。我只是想让它看起来更像 PHP.

您可以将数组转换为对象。

$users = [
    (object)[
        'id'     => 1,
        'name'   => 'John',
        'amount' => 1000
    ],
    (object)[
        'id'     => 2,
        'name'   => 'Smith',
        'amount' => 2000
    ],
];

// create
$users[] = (object)['id' => 3, 'name' => 'Joe', 'amount' => 3000];

// read
echo $users[2]->name;

// update
$users[2]->name = 'FooBar';

// delete
unset($users[2]);
array(2) {
  [0] =>
  class stdClass#1 (3) {
    public $id =>
    int(1)
    public $name =>
    string(4) "John"
    public $amount =>
    int(1000)
  }
  [1] =>
  class stdClass#2 (3) {
    public $id =>
    int(2)
    public $name =>
    string(5) "Smith"
    public $amount =>
    int(2000)
  }
}

我认为使用 json_decode

快捷方式 也值得一提

只需将您的 JavaScript 声明用引号引起来:

$users = json_decode(
'[
    {
        "id": 1,
        "name": "John",
        "amount": 1000
    },
    {
        "id": 2,
        "name": "Smith",
        "amount": 2000
    }
]'
);

example

PHP 中的通用键值数据结构不是一个对象,它是一个 associative array。您的代码将如下所示:

$users = [
    [
        'id' => 1,
        'name' => 'John',
        'amount' => 1000,
    ],
    [
        'id' => 2,
        'name' => 'Smith',
        'amount' => 2000,
    ],
];

然后使用方括号访问元素:

$users[0]['amount'] = 0;
$users[1]['amount'] = 3000;
echo $users[0]['amount'];

虽然为此使用对象对于 JS 开发人员来说可能更熟悉,但将数组用于临时数据会让您使用更多 PHP 的 built-in functionality,它是围绕关联数组。


另一方面,如果您实际上在每个对象中都有相同的字段,则您应该 declare a class 列出这些字段。这将为您提供更好的性能、更好的错误处理、更清晰的代码,以及将来在这些 类 中封装逻辑的能力。

在 PHP 8 中,您可以使用 constructor property promotion 编写此代码,如下所示:

class User
{
    public function __construct(
        public int $id,
        public string $name, 
        public int $amount
    ) {}
}

然后您将像这样创建数组(使用命名参数,也是 PHP 8.0 中的新参数):

$users = [
    new User(
        id: 1,
        name: 'John',
        amount: 1000,
    ),
    new User(
        id: 2,
        name: 'Smith',
        amount: 2000,
    ),
];

并像这样使用它:

$users[0]->amount = 0;
$users[1]->amount = 3000;
echo $users[0]->amount;

在 PHP 的旧版本中,声明 类 和创建对象的代码必须略有不同,但好处是相同的。