PHP对象文字

TMS*_*TMS 56 php object literals object-literal

在PHP中,我可以很容易地指定数组文字:

array(
    array("name" => "John", "hobby" => "hiking"),
    array("name" => "Jane", "hobby" => "dancing"),
    ...
)
Run Code Online (Sandbox Code Playgroud)

但是如果我想要一些对象呢?如何在PHP中指定对象文字?即在JavaScript中它将是:

[
    {name: "John", hobby: "hiking"},
    {name: "Jane", hobby: "dancing"}
]
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 85

正如BoltClock所提到的,PHP中没有对象文字但是你可以通过简单地将数组类型转换为对象来实现:

$testArray = array(
    (object)array("name" => "John", "hobby" => "hiking"),
    (object)array("name" => "Jane", "hobby" => "dancing")
);

echo "Person 1 Name: ".$testArray[0]->name;
echo "Person 2 Hobby: ".$testArray[1]->hobby;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对象始终通过引用传递,而数组则不是.因此,更改对象的属性会在分配对象的任何位置更改它.阵列不是这种情况; 他们保持独立. (12认同)

小智 64

从PHP 5.4开始,您还可以使用短数组语法:

$json = [
    (object) ['name' => 'John', 'hobby' => 'hiking'],
    (object) ['name' => 'Jane', 'hobby' => 'dancing'],
];
Run Code Online (Sandbox Code Playgroud)

  • 非常好,这使得脚本更加清晰 (3认同)

Jos*_*osh 9

正如其他人所说,PHP中没有对象字面值,但你可以通过将数组转换为对象来"伪造"它.

使用PHP 5.4,这更加简洁,因为数组可以用方括号声明.例如:

$obj = (object)[
    "foo" => "bar",
    "bar" => "foo",
];
Run Code Online (Sandbox Code Playgroud)

这将为您提供具有"foo"和"bar"属性的对象.但是,我认为这并不比使用关联数组提供更多优势.这只是一种语法差异.

考虑使用您使用的所有语言的独特性和"风味".在JavaScript中,对象文字遍布各处.在PHP中,关联数组在功能上与JavaScript对象文字相同,易于创建,并且被其他PHP程序员很好地理解.我认为你最好不要接受这种"味道"而不是试图让它感觉像JavaScript的对象文字语法.