PHP内联写入对象

use*_*218 8 javascript php arrays syntax object

我开始放弃在PHP中使用数组,因为对象非常简洁,在PHP 5中使用对象时没有性能命中.

目前我的方式是:

$object = (object) array('this' => 'that', 'foo' => (object) array('bar' => 123));

但是,我发现每次因为类型转换不是递归而必须进行类型转换是如此繁琐...

有没有办法在PHP(或将有)像这样或类似的东西这样做:

$object = {
    'this' => 'that',
    'foo' => {
        'bar' => 123
    }
};
Run Code Online (Sandbox Code Playgroud)

Iva*_*ych 24

从PHP 5.4开始,短阵列语法已经可用.这允许您像这样初始化数组:

$myArray = ["propertyA" => 1, "propertyB" => 2];
Run Code Online (Sandbox Code Playgroud)

从PHP7开始,PHP中没有当前的短对象语法.但是您可以使用短数组语法来创建这样的对象:

$myObject = (object) ["propertyA" => 1, "propertyB" => 2];
Run Code Online (Sandbox Code Playgroud)

看起来比使用以下构造更好更短:

$myObject = new \StdClass();
$myObject->propertyA = 1;
$myObject->propertyB = 2;
Run Code Online (Sandbox Code Playgroud)


小智 5

我建议您构建一个函数宽度StdClass

function arrayToObject($array) {
    if(!is_array($array)) {
        return $array;
    }

    $object = new stdClass();
    if (is_array($array) && count($array) > 0) {
      foreach ($array as $name=>$value) {
         $name = strtolower(trim($name));
         if (!empty($name)) {
            $object->$name = arrayToObject($value);
         }
      }
      return $object;
    }
    else {
      return FALSE;
    }
}
Run Code Online (Sandbox Code Playgroud)