发表回复 
 
主题评价:
  • 0 次(票) - 平均星级: 0
  • 1
  • 2
  • 3
  • 4
  • 5
非纯PHP群成员的技巧分享集录(不断更新中)
2009-07-01, 02:24 PM (这个帖子最后修改于: 2009-07-01 02:31 PM by hightman.)
帖数: #1
非纯PHP群成员的技巧分享集录(不断更新中)
非纯PHP进阶交流群, 群号码: 17708754, 围绕PHP及周边技术讨论, 从现起记录每一位群成员的技巧点分享, 主要收集在实际开发过程中容易犯到的错误或盲区为主.

分享点按时间排列, 从上到下, 本贴不断更新中!!
查找这个用户的全部帖子
引用并回复
2009-07-01, 02:37 PM
帖数: #2
[PHP] foreach 和 each 在处理数组遍历时的一点不同.
[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';

这段代码是不会打印出 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';

查找这个用户的全部帖子
引用并回复
2009-07-01, 02:42 PM
帖数: #3
[PHP] 在函数或其它程序栈里用 global 的注意事项
[闲蛋超人 于 2009/07/01 15:00 提交]

先看以下一段代码, 然后再谈结果方便一些
PHP 代码:
function test()
{
  global 
$a;
  
$b $a 1;
  
$a = &$b;
  
$a++;
}
$a 1;
test();
echo 
"a=$a\n"
这段代码的运行结果是 a=1, 因为在 test() 函数声明的 global $a 中间又被处理成 $b 的引用, 而本质上 global $a 可以理解为 $a = &$GLOBALS['a'], 所以 当 $a 重新指向了 $b 的引用后, 它的值再发生改变时并不会影响到真正的全局变量了.
查找这个用户的全部帖子
引用并回复
2009-07-01, 03:41 PM
帖数: #4
[PHP] 不用 === 的一个后果...
hightman 提交,

其实这个是我多年以前犯过的一个小错误, 再拿出来说说, 虽然 php 开发小组很早就提供了 === 功能, 但很多时候由于种种原因还是会用 == 来比较. 先看代码:
PHP 代码:
$key 'key';
$arr = array('first''key' => 'value');
foreach (
$arr as $k => $v)
{
  if (
$key == $k)
    echo 
"found: $v\n";

这代码原意是想输出 value 而已, 结果连 first 也输出来了 ...
像 mysql_fetch_array() 默认情况下也是返回数字+字段名双重索引的数组, 这时如果 == 来判断键名可能就会出错咯..
查找这个用户的全部帖子
引用并回复
发表回复 


论坛跳转: