如何在PHP中定义一个空对象

用一个新的数组,我这样作: json

$aVal = array();

$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";

对象有相似的语法吗 数组

(object)$oVal = "";

$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";

#1楼

$x = new stdClass();

手册中注释总结起来最好: 函数

stdClass是默认的PHP对象。 stdClass没有属性,方法或父级。 它不支持魔术方法,而且不实现任何接口。 this

当将标量或数组转换为Object时,将得到stdClass的实例。 只要须要通用对象实例,就可使用stdClass。 spa


#2楼

您有一个糟糕但有用的技术: code

$var = json_decode(json_encode([]), FALSE);

#3楼

正如其余人指出的那样,您可使用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功能的基础。 字符串


#4楼

除了zombat的答案,若是您一直忘记stdClass

function object(){

        return new stdClass();

    }

如今您能够执行如下操做:

$str='';
$array=array();
$object=object();

#5楼

要以相似方式访问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};
相关文章
相关标签/搜索