非纯PHP群成员的技巧分享集录(不断更新中)

非纯PHP进阶交流群, 群号码: 17708754, 围绕PHP及周边技术讨论, 从现起记录每一位群成员的技巧点分享, 主要收集在实际开发过程中容易犯到的错误或盲区为主.

分享点按时间排列, 从上到下, 本贴不断更新中!!

非纯PHP群成员的技巧分享集录(不断更新中)》上有4条评论

  1. hightman

    [hightman 于 2009/07/01 14:00 提交]

    在对数组进行循环遍历时, 可以采用 each() 也可以采用 foreach, 但应该注意的是 foreach 中对于参数数组是一份形参一样的拷贝体, 如果您在循环体内又对数组添加或删除元素, 则不会对此次循环起作用.

    具体差异代码如下:
    [php]
    $arr = array(‘a’, ‘b’);
    foreach ($arr as $key => $value)
    {
    echo “$key => $value\n”;
    if ($value == ‘b’) $arr[] = ‘c’;
    }
    [/php]
    这段代码是不会打印出 c 这个新加入的元素的, 改用 each 时如下代码就可以打印出 ‘c’ 这个元素了, 所以在循环时如果还对数组进修改动的话要注意这个问题.
    [php]
    $arr = array(‘a’, ‘b’);
    reset($arr);
    while (list($key, $value) = each($arr))
    {
    echo “$key => $value\n”;
    if ($value == ‘b’) $arr[] = ‘c’;
    }
    [/php]

    回复
  2. hightman

    [闲蛋超人 于 2009/07/01 15:00 提交]

    先看以下一段代码, 然后再谈结果方便一些
    [php]
    function test()
    {
    global $a;
    $b = $a + 1;
    $a = &$b;
    $a++;
    }
    $a = 1;
    test();
    echo “a=$a\n”;
    [/php]
    这段代码的运行结果是 a=1, 因为在 test() 函数声明的 global $a 中间又被处理成 $b 的引用, 而本质上 global $a 可以理解为 $a = &$GLOBALS[‘a’], 所以 当 $a 重新指向了 $b 的引用后, 它的值再发生改变时并不会影响到真正的全局变量了.

    回复
  3. hightman

    hightman 提交,

    其实这个是我多年以前犯过的一个小错误, 再拿出来说说, 虽然 php 开发小组很早就提供了 === 功能, 但很多时候由于种种原因还是会用 == 来比较. 先看代码:
    [php]
    $key = ‘key’;
    $arr = array(‘first’, ‘key’ => ‘value’);
    foreach ($arr as $k => $v)
    {
    if ($key == $k)
    echo “found: $v\n”;
    }
    [/php]
    这代码原意是想输出 value 而已, 结果连 first 也输出来了 …
    像 mysql_fetch_array() 默认情况下也是返回数字+字段名双重索引的数组, 这时如果 == 来判断键名可能就会出错咯..

    回复
  4. 999

    [quote=’hightman’ pid=’3210′ dateline=’1246434104′]
    hightman 提交,

    其实这个是我多年以前犯过的一个小错误, 再拿出来说说, 虽然 php 开发小组很早就提供了 === 功能, 但很多时候由于种种原因还是会用 == 来比较. 先看代码:
    [php]
    $key = ‘key’;
    $arr = array(‘first’, ‘key’ => ‘value’);
    foreach ($arr as $k => $v)
    {
    if ($key == $k)
    echo “found: $v\n”;
    }
    [/php]
    这代码原意是想输出 value 而已, 结果连 first 也输出来了 …
    像 mysql_fetch_array() 默认情况下也是返回数字+字段名双重索引的数组, 这时如果 == 来判断键名可能就会出错咯..
    [/quote]

    这主要是因为$key 与 0 对比条件是成立的。

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注