标签 php 下的文章

PHP流程控制foreach小技巧

有这么一个数组:

$arr = array(1, 2, 3, 4);

如果需要遍历然后修改值, 常规写法为:

foreach ($arr AS $k => $v) {
    $v= $v* 2;
    $arr[$k] = $v;
}

一有时间就啃PHP手册, 刚发现一简单写法:

foreach ($arr AS &$v) {
    $v = $v * 2;
}

解释: 自PHP5起, 可以很容易地通过在$v之前加上 & 来修改数组的元素. 此方法将以引用赋值而不是拷贝一个值, 这样$arr[$k]就被直接修改了.

原谅的我无知, 知道的别笑话我.

关于php5类里的成员赋值(初始化)

先看代码:

<?php
class a
{
    var $abc = array(
        'a' => 'b',
        'b' => array(
            'a' => array('a' => time())
        )
    );
}
?>

然后再来看php官方文档的介绍:
类的属性

这段代码会报语法错误, 报在time()那里, 然后time()换成字符串, 或者常量, 就没事了.
其实说起来还是我基础不好, 一哥们给我的答案灰常好: "类里面变量的初始化不能是一个表达式".

官方解释的也很透彻: "属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。"

这里time()就是个表达式, 变量同样也是个表达式, 所以会报错.