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 协议》,转载必须注明作者和本文链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚函数表

虚函数   C中的虚函数的实现一般是通过虚函数表(C规范并没有规定具体用哪种方法,但大部分的编译器厂商都选择此方法)。 类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。 注意的是,编译器会为每个有虚函数的类创建一个…

linux bash tutorial

bash read-special-keys-in-bash xdotool linux 登录启动顺序转载于:https://www.cnblogs.com/shaohef/p/9528927.html

centos7安装php8,centos8安装php7.4

一,下载php7.41,官方网站:https://www.php.net/2,下载[rootyjweb source]# wget https://www.php.net/distributions/php-7.4.2.tar.gz说明:在linux上以编译方式安装软件时,多数人都习惯把软件安装到 /usr/local目录下&#xff0c…

C++的四种强制类型转换

C的四种强制类型转换,所以C不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C类型的强制转换呢? 新类型的…

MongoDB系列之——安装和启动

CentOS 7 安装MongoDB 4.0 社区版 1. Yum安装 创建Yum仓库先创建新的文件 vim /etc/yum.repos.d/mongodb-org-4.0.repo  在新文件中填入     [mongodb-org-4.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/…

javaone_JavaOne 2012:JavaFX图形技巧和窍门

javaone我回到希尔顿(皇家宴会厅B)看了Richard Bair的(Oracle Java Client Architect)的“ JavaFX图形技巧和窍门”。 Bair与FX Experience相关联,并且显然了解JavaFX。 拜尔说,他演讲的主题是表演。 他告诫…

php pdo 参数绑定,PDO预处理之参数绑定和列绑定

摘要:PDO查询中,2个绑定操作:参数绑定与列绑定;参数绑定:bindParm() 和 bindValue();bindParm(:占位符,变量,类型常量) 类型常量默认为字符串bindValue(:占位符,值或变量,类型常量) 如果直接传值,可省略类型…

自定义C++异常处理

例1&#xff1a;自定义一个继承自excepton的异常类myException C标准中&#xff0c;定义在<stdexcept>中的任何异常类都派生自exception Class&#xff0c;本例也只是简单地由exception继承&#xff0c;在try段抛出一个异常并捕捉。代码如下&#xff1a; /* test.cpp ve…

DCL并非单例模式专用

我相信大家都很熟悉DCL&#xff0c;对于缺少实践经验的程序开发人员来说&#xff0c;DCL的学习基本限制在单例模式&#xff0c;但我发现在高并发场景中会经常遇到需要用到DCL的场景&#xff0c;但并非用做单例模式&#xff0c;其实DCL的核心思想和CopyOnWrite很相似&#xff0c…

使用CLI扩展和重新平衡Couchbase集群

Couchbase通过多种方式提供高可用性和灾难恢复 &#xff1a; 同质簇 复写 集群内复制 备份还原 机架区意识 该博客将展示如何使用Couchbase命令行界面&#xff08;CLI&#xff09;创建Couchbase集群。 此外&#xff0c;还可以使用Couchbase REST API和Couchbase Web Consol…

将php源码修改成存在注入的源码,天融信关于ucms系统存在代码注入漏洞的分析...

一、背景介绍UCMS是一款简单的开源内容管理系统&#xff0c;可以非常方便的通过它来快速开发各种各种企业站、文章站、站群系统。系统兼容PHP5.2–PHP7.0&#xff0c;在APACHE、NGINX、IIS上都能使用&#xff0c;支持MySQL SQLite两种数据库。后台简洁高效&#xff0c;上手容易…

第1章 计算机系统漫游(深入理解计算机系统)

1 #include <stdio.h> 2 3 int main() 4 { 5 printf("hello, world\n"); 6 } 1.1 信息就是位上下文 hello程序的声明周期是从一个源程序开始的&#xff0c;即程序员利用编辑器创建并保存的文本文件&#xff0c;文件名是hello.c。源程序实际上就是一个由值…

java impliments,dubbo使用GenericService泛化调用

我们项目中常见场景&#xff0c;java应用内部接口都是使用dubbo&#xff0c;某个非java应用需要调用我们的接口的时候&#xff0c;无法使用dubbo&#xff0c;这是我们需要给它提供其他形式的接口&#xff0c;如restful api等等&#xff0c;这时我们需要为这个接口开发而增加额外…

使用Eclipse 创建 搭建SpringBoot项目

之前用IDEA 创建Springboot 项目感觉十分简单&#xff0c;但是常用的毕竟是Eclipse 所以开一个帖子记录一下Eclipse 如何创建 Springboot 项目 第一步&#xff1a;Help -> Eclipse Marketplace… 在search 中输入 STS install 即可&#xff01; 第二部&#xff1a;new -&g…

static函数与普通函数区别

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式&#xff0c; 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序&#xff0c; 当一个源程序由多个源文件…

zendguard php5.4,ZendGuardLoader6.0.0支持PHP5.4.x系列

不知不觉&#xff0c;现在Zend Guard Loader发布了6.0.0版本&#xff0c;支持PHP 5.4.x系列。官方地址&#xff1a;http://www.zend.com/en/products/guard/downloads (需要注册用户后下载)这里提供下常用的版本Windows&#xff1a;附件&#xff1a;ZendGuardLoader-70429-PHP-…

camel mq_Camel:构建基于消息的应用程序

camel mq这是一篇长文章&#xff0c;包含三个单独的主题&#xff1a; Java的Apache Camel入门 使用CamelRunner改善路线的启动 使用Camel构建基于消息的应用程序 但是&#xff0c;由于我准备了包含所有这些材料的camel-demo-1.0.0-SNAPSHOT-project.zip &#xff0c;因此我认…

what??|诞生才一年的BCH竟面临硬分叉的抉择

BCH才刚过一周岁生日一个星期&#xff0c;BCH社区的主力之一Bitcoin ABC&#xff08;BCH全网接近三分之二节点运行的软件系统由Bitcoin ABC开发&#xff09;就搅动了社区的涟漪。8月8号&#xff0c;Bitcoin ABC公布了自己的路线图提出修改BCH的共识协议。而BCH社区的大V之一Cra…

改变div php,JS改变DIV样式

摘要&#xff1a;var boxwindow.οnlοadfunction(){box document.getElementById("box")}function aa(){box.style.height "400px"}function bb(){box.style.width "400px"}function cc(){box.style.backgroundColor "blue"}批改老…

switch变量的作用 域问题

&#xfeff;&#xfeff;switch是我们做条件选择时&#xff0c;经常用到的一个语句。一直以来对于他的使用相信大家也都是得心应手&#xff0c;前几天在linux下写一个c程序时遇到了这样的一个问题&#xff0c;请看例子&#xff1a;#include<iostream>using namespace st…