php 5.6 与之前版本不兼容中的数组属性定义辨析
在php5.6官方文档的不兼容页(http://php.net/manual/zh/migration56.incompatible.php)中提到了几个与以前版本不兼容的情况,其中提到了为类定义数组属性时,不兼容的情况,原文及示例如下:
在 PHP 5.6 之前的版本中,为类定义数组类型的属性时, 如果数组中同时使用了显式数组键和隐式数组键,并且显式的键和隐式的序列键相同, 那么数组的键将被覆盖。例如:
<?php
class C {
const ONE = 1;
public $array = [
self::ONE => 'foo',
'bar',
'quux',
];
} var_dump((new C)->array);
?>
以上示例在PHP 5.5中输出:
array(2) {
[0]=>
string(3) "bar"
[1]=>
string(4) "quux"
}
在PHP 5.6中输出:
array(3) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(4) "quux"
}
$array = [
ONE=>'foo',
'bar',
'quux'
];
var_dump($array);
输出:
array(3) {
[1] =>
string(3) "foo"
[2] =>
string(3) "bar"
[3] =>
string(4) "quux"
}
1.2 非初始化时赋值:
define('ONE', 1);
class C {
public $array;
}
$c = new C;
$c->array = [ONE=>'foo','bar','quux'];
var_dump($c->array);
输出:
array(3) {
[1] =>
string(3) "foo"
[2] =>
string(3) "bar"
[3] =>
string(4) "quux"
}
define('ONE', 1);
class C {
const ONE = 1;
public $array;
public function __construct() {
$this->array = array(
'bar',
ONE => 'foo',
'quux',
);
}
}
$c = new C;
var_dump($c->array);
输出:
array(3) {
[0] =>
string(3) "bar"
[1] =>
string(3) "foo"
[2] =>
string(4) "quux"
}
2. 显式键对隐式键的覆盖:
define('ONE', 1);
class C {
const ONE = 1;
public $array = array(
'bar',
'quux',
ONE => 'foo',
'guru'
);
}
$c = new C;
var_dump((new C)->array);
输出:
array(3) {
[0] =>
string(3) "bar"
[1] =>
string(3) "foo"
[2] =>
string(4) "guru"
}
3. 字面量常量作为显式键名:
class C {
public $array = array(
'bar',
'quux',
1 => 'foo',
'guru'
);
}
$c = new C;
var_dump((new C)->array);
输出:
array(3) {
[0] =>
string(3) "bar"
[1] =>
string(3) "foo"
[2] =>
string(4) "guru"
}
class C {
public $array = array(
1 => 'foo',
'bar',
'quux',
);
}
$c = new C;
var_dump((new C)->array);
输出:
array(3) {
[1] =>
string(3) "foo"
[2] =>
string(3) "bar"
[3] =>
string(4) "quux"
}
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
以上例程会输出:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
php 5.6 与之前版本不兼容中的数组属性定义辨析的更多相关文章
- 解决Selenium与firefox浏览器版本不兼容问题
因为在用java打开firefox浏览器的时候报错 org.openqa.selenium.firefox.NotConnectedException: Unable to connect to ho ...
- Selenium2学习-007-WebUI自动化实战实例-005-解决 Firefox 版本不兼容:org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary
此文主要讲述 Java 运行 Selenium 脚本时,因 Friefox 浏览器版本与 selenium-server-standalone-x.xx.x.jar 不兼容引起的 org.openqa ...
- cuda和gcc版本不兼容
gcc8.1和cuda9.0版本不兼容,比较坑. 下面是各版本cuda支持的gcc: 从CUDA 4.1版本开始,现在支持gcc 4.5.gcc 4.6和4.7不受支持. 从CUDA 5.0版本开始, ...
- Gradle 'MYasprj' project refresh failed Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容
Gradle ‘MYasprj’ project refresh failed Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容.请 ...
- 模块XXXX可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86(32位)x64(64位)版本兼容。
最近自己在编写ActiveX控件.遇到的麻烦事不少. 今天遇到了这个问题“模块XXXX可能与您正在运行的Windows版本不兼容.检查该模块是否与regsvr32.exe的x86(32位)x64(64 ...
- ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed
习惯了linux下用pip install numpy及pip install pandas命令了.折腾了好久了. 上来先在python3中pip3 install numpy装了numpy,然后再p ...
- 【我的Android进阶之旅】解决 Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86
一.错误描述 刚刚打开Android Studio新建一个项目,然后就编译不了,报了如下所示的错误: 错误描述为: Error:CreateProcess error=216, 该版本的 %1 与您运 ...
- 解决selenium与firefox版本不兼容问题
Python环境下类比 个人使用 32位环境 Python 2.7.12 Selenium 2.53.6 Firefox 47.01 安装selenium可用pip选择对应版本,参考另一教程. 因为在 ...
- idea2019版与maven3.6.2版本不兼容引发的血案
昨天遇到了点问题解决浪费了一些时间(导致更新内容较少)回顾下问题 项目出现Unable to import maven project: See logs for details 翻了好多博客 莫名的 ...
随机推荐
- OPENVPN2.3配置文档官方说明
openvpn Section: Maintenance Commands (8)Index NAME openvpn - secure IP tunnel daemon. SYNOPSIS open ...
- rm 递归删除目录下某一类型文件
命令:find -name "*.js.map" | xargs rm -f 解释:find -name "*.js.map" 可以查到当前目录下(包括子目录, ...
- 消息队列kafka
消息队列kafka 为什么用消息队列 举例 比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了. 那么在执行这些小任务的时候,可能 ...
- 使用TensorFlow识别照片中的物体
1.环境ubuntu14.04.5 安装TensorFlow 官方文档:https://www.tensorflow.org/install/install_linux sudo pip instal ...
- MySQL GTID (二)
MySQL GTID 系列之二 三.在线将GTID转化为传统模式 环境见上篇系列文章 关闭GTID,不用停止服务,不影响线上业务 3.1 关闭GTID复制,调整为传统复制 #SLVAE实例上停止复制 ...
- Java Graphics 2D绘制图片 在Liunx上乱码
绘图的代码工具类 package com.gwzx.framework.captcha; import java.awt.Color; import java.awt.Font; import jav ...
- android处理Back键Home键和Menu键事件(转)
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BAC ...
- 25- 解决'python -m pip install --upgrade pip' 报错问题
转载于:https://blog.csdn.net/cxs123678/article/details/80659273 再安装包的时候提示 You are using pip version 9.0 ...
- Linux内核分析 - 网络[十四]:IP选项
Linux内核分析 - 网络[十四]:IP选项 标签: linux内核网络structsocketdst 2012-04-25 17:14 5639人阅读 评论(1) 收藏 举报 分类: 内核协议栈 ...
- Golang之排序算法
冒泡排序 package main //冒泡排序 import "fmt" func bsort(a []int) { ; i < len(a); i++ { ; j < ...