对于一个新数组,我这样做:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
对象是否有类似的语法
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
对于一个新数组,我这样做:
$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";
对象是否有类似的语法
(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";
当前回答
你有这个不好但有用的技术:
$var = json_decode(json_encode([]), FALSE);
其他回答
$x = new stdClass();
手册中的一条评论总结得最好:
stdClass是默认的PHP对象。 stdClass没有属性,方法或 的父母。它不支持魔法 方法,并且没有实现接口。 将标量或数组强制转换为 对象的实例 stdClass。你可以使用stdClass 当你需要一个通用对象时 实例。
这里有一个迭代的例子:
<?php
$colors = (object)[];
$colors->red = "#F00";
$colors->slateblue = "#6A5ACD";
$colors->orange = "#FFA500";
foreach ($colors as $key => $value) : ?>
<p style="background-color:<?= $value ?>">
<?= $key ?> -> <?= $value ?>
</p>
<?php endforeach; ?>
Php.net说它是最好的:
$new_empty_object = new stdClass();
我想指出的是,在PHP中,没有像空对象这样的东西:
$obj = new stdClass();
var_dump(empty($obj)); // bool(false)
当然$obj是空的。
另一方面,空数组在两种情况下都是空的
$arr = array();
var_dump(empty($arr));
引用changelog函数为空
没有属性的对象不再被认为是空的。
stdClass是默认的PHP对象。stdClass没有属性、方法或父类。它不支持魔术方法,也不实现任何接口。
当您将标量或数组强制转换为Object时,您将获得stdClass的实例。只要需要泛型对象实例,就可以使用stdClass。
<?php
// ways of creating stdClass instances
$x = new stdClass;
$y = (object) null; // same as above
$z = (object) 'a'; // creates property 'scalar' = 'a'
$a = (object) array('property1' => 1, 'property2' => 'b');
?>
stdClass不是基类!PHP类不会自动继承任何类。所有的类都是独立的,除非它们显式地扩展另一个类。PHP在这方面不同于许多面向对象的语言。
<?php
// CTest does not derive from stdClass
class CTest {
public $property1;
}
$t = new CTest;
var_dump($t instanceof stdClass); // false
var_dump(is_subclass_of($t, 'stdClass')); // false
echo get_class($t) . "\n"; // 'CTest'
echo get_parent_class($t) . "\n"; // false (no parent)
?>
你不能在你的代码中定义一个名为stdClass的类。该名称已被系统使用。你可以定义一个名为“Object”的类。
您可以定义一个扩展stdClass的类,但是您不会得到任何好处,因为stdClass什么也不做。
(在PHP 5.2.8上测试)