php7 对象转数组,php7中为对象/关联数组进行解构赋值

在CoffeeScript,Clojure,ES6和许多其他语言中,我们对对象/贴图/等进行了解构,如下所示:

obj = {keyA: 'Hello from A', keyB: 'Hello from B'}

{keyA, keyB} = obj

我在php中找到了这个list函数,可以让你像这样构造数组:

$info = array('coffee', 'brown', 'caffeine');

list($drink, $color, $power) = $info;

对于PHP 7.0及更低版本,超出了功能list。文档说明:

list仅适用于数值数组,并假设数字索引从0开始。

可能适合您的目的是将extract()变量从数组导入当前符号表的函数。

虽然list您可以明确定义变量名称,extract()但不会给您这种自由。

提取关联数组

有了extract你可以做这样的事情:

$info = [ 'drink' => 'coffee', 'color' => 'brown', 'power' => 'caffeine' ];

extract($info);

var_dump($drink); // string(6) "coffee"

var_dump($color); // string(5) "brown"

var_dump($power); // string(8) "caffeine"

提取对象

提取对象的工作方式几乎相同。由于extract只将数组作为参数,我们需要将对象属性作为数组。get_object_vars为你这样做。它返回一个关联数组,其中所有公共属性都是键,其值是值。

class User {

public $name = 'Thomas';

}

$user = new User();

extract( get_object_vars($user) );

var_dump($name); // string(6) "Thomas"

陷阱

extract()是不同的,list因为它不允许您显式定义导出到符号表的变量名称。

变量名称默认对应于数组键。

list是一种语言结构,extract()而是一种功能

可能会覆盖您事先无意中定义的变量

您的数组键可能无效,因为变量名称

使用$flags您可以作为第二个参数传递的参数,可以extract()在碰撞或无效变量的情况下影响行为。但是知道如何extract()工作并将其与cauton一起使用仍然很重要。

从PHP 7.1开始,这是可能的:

您现在可以在list()或其新的速记[]语法中指定键。这使得能够使用非整数或非顺序密钥对数组进行解构。

现在可以使用简写数组语法([])来解析分配的数组(包括在foreach中),作为现有list()语法的替代,仍然支持该语法。

它真的不漂亮,幸好这已经在7.1中通过wiki.php.net/rfc/short_list_syntax

如下所示 :

['a' => $a, 'c' => $c] = $args;

laravel 底层获取controller和action 就使用到上面的解构赋值。

本作品采用《CC 协议》,转载必须注明作者和本文链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值