我开始远离在PHP中使用数组,因为对象是如此整洁,在php5中使用对象时没有性能问题。
目前我的做法是:$object = (object) array('this' => 'that', 'foo' => (object) array('bar' => 123));
然而,我发现每次都要进行类型转换是非常乏味的,因为类型转换不是递归的……
在php中有没有(或者会有)这样的方法或者类似的东西:
$object = {
'this' => 'that',
'foo' => {
'bar' => 123
}
};
6条答案
按热度按时间lyr7nygr1#
从PHP 5.4开始,短数组语法已经可用。这允许你像这样初始化数组:
在PHP7之前,PHP中没有短对象语法。但是你可以转换短数组语法来创建这样的对象:
看起来比使用下面的结构更好更短:
t1qtbnec2#
我建议你构建一个函数width StdClass。
uyto3xhc3#
PHP目前不支持短对象语法。从PHP 5.4开始,它们支持短数组语法。也许5.5会包括你所追求的。
作为替代方案:
您可以将对象创建为JSON并使用
json_decode()
:**注意:**我只是展示了一种解决问题的方法。我并不提倡这种做法。
i34xakig4#
我有一个替代的解决方案,当你收到一个已经建成的阵列。假设你的数组有n个嵌套数组,所以你没有机会以简单的方式转换每个数组。这样就可以了:
我不会在一个大循环或类似的东西中使用它,因为它比坚持使用数组sintax慢得多。另外,如果数组的一个元素是一个函数或其他有趣的东西,这将打破这一点。
示例用法:
s3fp2yjn5#
不幸的是,没有像这样创建
stdClass
示例的语法。但是您可以使用new
关键字和任何spl类(我承认并没有更整洁)。如果你想优化击键,你可以写一个像这样的小助手函数:然后写
6mw9ycah6#
虽然我真的不明白你为什么要这样做(* 关联数组本质上是纯数据对象 *),但如果你坚持:
你可以使用下面的 “trick/hack”,而不是将每个级别上的每个数组都转换为一个对象:
这会将所有数组转换为
stdClass
的示例,我相信这正是您想要的。我不得不再说一遍:PHP * 不是 * JavaScript,对象在PHP等语言中要昂贵得多(相对而言),然后在JS中。如果你不需要对象,我强烈建议你坚持使用assoc数组。
和对象一样,数组也可以 * type-hint *:
function foo (array $argument){}
如果你真的想把它们变成某个类的特定示例,为什么不改变 constructor,来处理数组:
然后继续添加任何您想添加到该批中的方法