Press "Enter" to skip to content

之前提到的PHP5.4一个注意点的update

在之前, 我曾经介绍过, 在PHP5.4中, PHP5.4中一个需要注意的变化(Chained string offsets) , 后续因为大多数人都表示这个变化很敏感, 容易成为坑.. 于是, 我们现在对此做了一些改进.
具体的改变是, 对于一个变量$a, 如果$a是一个字符串, 那么, 对于非数字型索引, 比如$a["foo"], 在isset的时候将返回false, empty返回true, 但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:

<?php
$a = "laruence";
var_dump($a["foo"]) ; //PHP Warning:  Illegal string offset 'foo'
//output string(1) "l"
var_dump(isset($a["foo"]));
//false
var_dump(empty($a["foo"]));
//true

而对于键值是bool, double, null的情况, 将会和以前保持一致, 不过会抛出一个Notice信息.

<?php
$a = "bar";
echo $a[TRUE];  //PHP Notice:  String offset cast occured
//output a

而对于数字型的字符串索引, 比如"1", "12"等, 和以前保持一致.
不过, 还是要提醒下: PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
谢谢
更多更新信息, 请关注: Changelog

11 Comments

  1. wangtao
    wangtao August 5, 2014

    被小坑了下。微博关注你了,百度php问题竟然也是你的解答

  2. 新浪微博rss
    新浪微博rss April 12, 2014

    刚好踩坑,offset为double的时候报错,然后(int)就好了

  3. 黑客技术
    黑客技术 April 23, 2013

    感觉这个没有必要,统一才是王道,前人埋坑,后人填坑,早晚会成为一个笑柄

  4. test
    test April 27, 2012

    var_dump(isset($a[“foo”]));
    //false
    已经定义的变量,为什么会是false?

  5. webxu
    webxu February 11, 2012

    php版本问题?

  6. webxu
    webxu February 11, 2012

    var_dump(isset($a[“foo”]));php执行出来是true

    var_dump(empty($a[“foo”]));php执行出来是false
    怎么解释?

  7. wclssdn
    wclssdn December 28, 2011

    看来以后只能每次都isset一次了- -..

  8. treesky
    treesky December 20, 2011

    这个非常实用,避免了悄无声息的发生问题!

  9. 神仙
    神仙 December 19, 2011

    有个notice就好很多了。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.