0

我有以下数据结构。我需要一系列电影。每部电影都有名称、评级和年份。

Movies:

--Title = "The Hobbit";
--Rating = 7;
--Year   = 2012;

--Title = "Lord of the rings";
--Rating = 5;
--Year   = 2001;

如果这是 JavaScript,您将有一个对象数组:

const movies = [{
  title:"The Hobbit",
  rating:7,
  year:2012
},
{
  title:"Lord of the rings",
  rating:5,
  year:2001
}]

您如何在 PHP 中对此进行建模?我知道你可以创建一个 Movie 类,每部电影都是这个类的一个实例,但这是必需的吗?你能像 JavaScript 那样拥有非类对象吗?

4

2 回答 2

2

有两种方法:

关联数组:

$movies = [
[
  "title" => "The Hobbit",
  "rating" => 7,
  "year" => 2012
],
[
"title" => "Lord of the rings",
  "rating" => 5,
  "year" => 2001
]
];

或者您使用 \stdClass 类型的对象。最简单的定义:

$movie1 = (object)[
  "title" => "The Hobbit",
  "rating" => 7,
  "year" => 2012
];

或者你这样做:

$movie1 = new \stdClass();
$movie1->title = "The Hobbit";

访问是这样工作的:

echo $movie1->title; // The Hobbit

您可以在 $movies 中再次收集它们:

$movies = [$movie1];
于 2019-12-01T12:31:53.680 回答
0

你绝对可以!对象扩展了一个基本 \stdClass ,其行为类似于您的描述。一个很好的例子是 json_decode() 方法默认值。

要从头开始创建这些对象之一,请调用 \stdClass 构造函数,或者只是将数组类型转换为(object).

根据您的示例 JSON,这里是 PHP 中 \stdClass 的使用,包括序列化和实例化您自己的对象。

<?php

$decoded = json_decode('[{
        "title": "The Hobbit",
        "rating": 7,
        "year": 2012
    },
    {
        "title": "Lord of the rings",
        "rating": 5,
        "year": 2001
    }
]');
print_r($decoded);
echo $decoded[0]->title . PHP_EOL;

print_r(new \stdClass());
print_r((object)[]);
print_r((object)['example_public_property' => 'example_value']);
于 2019-12-01T12:35:05.183 回答