3

我收到此错误:“PHP Parse error: syntax error, unexpected T_VARIABLE in /var/www/vhosts/... on line 66”

这是我的代码:

function combine($charArr, $k) {

    $currentsize = sizeof($charArr);
    static $combs = array();
    static $originalsize = $currentsize; ###### <-- LINE 66 ######
    static $firstcall = true;

    if ($originalsize >= $k) {

        # Get the First Combination 
        $comb = '';
        if ($firstcall) { //if this is first call
            for ($i = $originalsize-$k; $i < $originalsize; $i++) {
                $comb .= $charArr[$i];
            }
            $combs[] = $comb; //append the first combo to the output array
            $firstcall = false; //we only want to do this during the first iteration
        }
    ....
    ....
}

知道有什么问题吗?

4

4 回答 4

7

引用手册 (该页面是关于静态属性的,但同样适用于变量)

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

你正在使用这个:

static $originalsize = $currentsize;

这是用表达式初始化 - 而不是常量。


是手册的部分,对静态变量的描述完全相同:

静态变量可以像上面的例子中看到的那样声明。尝试为这些作为表达式结果的变量分配值将导致解析错误。

而且,以防万一,这里是关于表达式的。


在你的情况下,为了避免这个问题,我想你可以修改你的代码,所以它看起来像这样:

$currentsize = sizeof($charArr);
static $originalsize = null;
if ($originalsize === null) {
    $originalsize = $currentsize;
}

接着就,随即 :

  • 静态变量用常量初始化
  • 如果其值为常数,则分配动态值。
于 2011-02-25T21:18:14.417 回答
3
static $originalsize = $currentsize; ###### <-- LINE 66 ######

您不能将变量作为静态变量的默认值传递。相反,请执行以下操作:

static $originalsize;
$originalsize = $currentsize;
于 2011-02-25T21:19:13.573 回答
0

引用php手册

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

于 2011-02-25T21:19:19.490 回答
0

来自php 手册

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

于 2011-02-25T21:20:25.557 回答