在5.4之前我们直接获取数组的值得方法如下

<?php
$str = 'a;b;c;d';
list($value) = explode(';',$str);
echo $value;

  

结果为: a

但是5.4的Array derenferencing 是什么意思呢?如下

<?php
$str = 'a;b;c;d';
$value = explode(';',$str)[0];
echo $value;

  

结果同为:a

其实很简单,但是我们运用当中可能会出现一些的问题。比如

<?php
class Example{ private $value = []; public function getValue(){ return $this->value; }
} $example = new Example; $example->getValue()['test'] = 'test'; echo $example->getValue()['test'];

  

会出现如下报错

Notice: Undefined index: test in D:\Php\xampp\htdocs\test\PHP - 5.x\example.php on line 17

上面的代码混淆了返回值和返回引用,在PHP中,除非你显示的指定返回引用,否则对于数组PHP是值返回,也就是数组的拷贝。因此上面代码对返回数组赋值,实际是对拷贝数组进行赋值,非原数组赋值。

下面是一种可能的解决办法,输出拷贝的数组,而不是原数组:

$vals = $config->getValues();
$vals['test'] = 'test';
echo $vals['test'];  //test

  

如果你就是想要改变原数组,也就是要反回数组引用,就是显示指定返回引用即可

<?php
class Example{ private $value = []; public function &getValue(){ return $this->value; }
} $example = new Example; $example->getValue()['test'] = 'test'; echo $example->getValue()['test'];

上面的例子输出:test

PHP - 5.4 Array dereferencing 数组值的更多相关文章

  1. Array.splice返回值是数组

    import flash.display.MovieClip; import flash.display.DisplayObject; var m:MovieClip = new MovieClip( ...

  2. Array(数组)对象-->数组值的修改

    1.修改数组值: 数组对象名[下标] = 新值: 举例:原数组如下: var arr = [1,2,3,4,5] 需求:将arr数组第二个元素的值改为10,代码如下: arr[1] = 10; con ...

  3. PHP的数组值传入JavaScript的数组里

    <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html><head>       &l ...

  4. C#中怎么判断一个数组中是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  5. golang之 Array(数组)

    目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...

  6. java中Array(数组)的用法

    8.Array(数组)    数组是作为对象来实现的.(really occupy the memopry,真实的占用内存 ) An array is a data structure that st ...

  7. JavaScript------去掉Array中重复值

    转载: http://blog.csdn.net/teresa502/article/details/7926796 代码: // 删除数组中重复数据 function removeDuplElem( ...

  8. Vscode 调试 C 语言时数组值无法显示的问题

    使用 Vscode 的 Gdb 扩展调试 C 语言时,发现数组变量在 变量列表里面中显示为指针,且只显示为其第一个元素的值,无法看到所有元素的值. 如图所示: 解决: 假设有一个元素个数为10的数组v ...

  9. Vue props中Object和Array设置默认值

    Vue中,在props中设置Object和Array的默认值 seller: { type: Object, default() { return {} } } seller: { type: Obj ...

随机推荐

  1. POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)

    Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...

  2. Nginx+tomcat 做负载均衡

    架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力 ...

  3. Mysql 5.5 replication 多数据库主从备份Master-Slave配置总结

    配置Mysql server 5.5 的双机备份,也就是master-slave模式.本例子还是一个多database复制的情况. 现在有两个database在同一台mysql server,也就是m ...

  4. VC 部署

    部署是分发要安装到其他计算机上的已完成应用程序或组件的过程. 当使用 Visual C++ 库提供的功能生成 C/C++ 应用程序时,该应用程序在运行时将依赖于那些库的存在. 为了让应用程序运行,它必 ...

  5. c#_delegate_异步调用_BeginInvoke

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. 如何快速的开发一个完整的iOS直播app(原理篇)

    目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...

  7. ExtJs 继承 和 插件 示例

    Ext.ns('Ext.ux'); function btn(){ alert(this.id); }; var panel_plugs = {//定义插件 init : function(panel ...

  8. Spring3之JDBC

    Spring提供了统一的数据访问异常层次体系,所涉及到的大部分异常类型都定义在org.springframework.dao包中,出于这个体系中所有异常类型均以org.springframework. ...

  9. Android drawable里面的图片存在,但是getIdentifier或者findViewByid找不到时处理步骤

    drawable里面的图片存在,但是getIdentifier或者findViewByid找不到时执行一下project -> clean

  10. jquery中的index方法

    问题描述:灵活使用jquery中的index方法 方法签名:index([selector|element]) 用法概述:P1.index(P2)  //调用者P1可以为对象或集合 参数为空,返回P1 ...