用一个新的数组,我这样作: json
$aVal = array(); $aVal[key1][var1] = "something"; $aVal[key1][var2] = "something else";
对象有相似的语法吗 数组
(object)$oVal = ""; $oVal->key1->var1 = "something"; $oVal->key1->var2 = "something else";
$x = new stdClass();
stdClass是默认的PHP对象。 stdClass没有属性,方法或父级。 它不支持魔术方法,而且不实现任何接口。 this
当将标量或数组转换为Object时,将得到stdClass的实例。 只要须要通用对象实例,就可使用stdClass。 spa
您有一个糟糕但有用的技术: code
$var = json_decode(json_encode([]), FALSE);
正如其余人指出的那样,您可使用stdClass。 可是我认为没有()会更干净,就像这样: 对象
$obj = new stdClass;
可是基于这个问题,看来您真正想要的是可以动态地向对象添加属性。 尽管能够,但您不须要为此使用stdClass。 确实可使用任何类。 只需建立任何类的对象实例并开始设置属性便可。 我喜欢建立本身的类,其名称仅为o,并提供一些我在这些状况下喜欢使用的基本扩展功能,而且很是适合从其余类进行扩展。 基本上,这是我本身的基础对象类。 我也喜欢简单地命名为o()的函数。 像这样: 接口
class o { // some custom shared magic, constructor, properties, or methods here } function o() { return new o; }
若是您不但愿拥有本身的基础对象类型,则只需让o()返回新的stdClass。 一个优势是,与将stdClass用做类名,函数名或二者都使用相比,o比stdClass更容易记住而且更短。 即便您的o类中没有任何代码,也要比笨拙的大写stdClass(可能会引用“性传播疾病类”的想法)记忆起来容易。 若是自定义o类,则可能会发现o()函数的用法而不是构造函数的语法。 这是一个正常的函数,它返回一个值,该值比构造方法的限制要少。 例如,函数名称能够做为字符串传递给接受可调用参数的函数。 一个函数还支持连接。 所以,您能够执行如下操做:$ result = o($ internal_value)-> some_operation_or_conversion_on_this_value(); 开发
这是基础“语言”构建其余语言层(顶层以彻底内部DSL编写)的一个很好的开始。 这相似于lisp的开发风格,PHP对其的支持比大多数人意识到的要好。 我意识到这个问题有点切线,可是这个问题触及到我认为是充分利用PHP功能的基础。 字符串
除了zombat的答案,若是您一直忘记stdClass
function object(){ return new stdClass(); }
如今您能够执行如下操做:
$str=''; $array=array(); $object=object();
要以相似方式访问stdClass中的数据,您只需使用{$ var}语法便可对关联数组进行操做。
$myObj = new stdClass; $myObj->Prop1 = "Something"; $myObj->Prop2 = "Something else"; // then to acces it directly echo $myObj->{'Prop1'}; echo $myObj->{'Prop2'}; // or what you may want echo $myObj->{$myStringVar};