【问题标题】:I'm getting a "syntax error, unexpected T_VARIABLE" error. I don't see what I'm doing wrong?我收到“语法错误,意外的 T_VARIABLE”错误。我不明白我做错了什么?
【发布时间】:2011-07-04 14:38:46
【问题描述】:

我收到此错误: “PHP 解析错误:语法错误,第 66 行 /var/www/vhosts/... 中出现意外的 T_VARIABLE”

这是我的代码:

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
        }
    ....
    ....
}

知道有什么问题吗?

【问题讨论】:

  • 为什么 $originalsize 在每次函数调用时都立即覆盖它的值是静态的?

标签: php syntax-error parse-error


【解决方案1】:

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

与任何其他 PHP 静态变量一样,静态属性只能是 使用文字初始化或 持续的;表达式不是 允许。所以虽然你可以初始化 整数的静态属性或 数组(例如),你可能不会 将其初始化为另一个变量,以 一个函数的返回值,或者一个 对象。

你正在使用这个:

static $originalsize = $currentsize;

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


这是the manual's section,它对静态变量的说法完全一样:

静态变量可以声明为 在上面的例子中看到。尝试去 为这些变量赋值 是表达式的结果将 导致解析错误。

为了以防万一,这里是about expressions


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

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

这样:

  • 静态变量用常量初始化
  • 如果它的值是常数,分配动态值。

【讨论】:

  • 谢谢帕斯卡,很好的回答!您的解决方案帮助我从第一次调用函数时设置的任何值保留 $originalsize 的值。 :)
  • 该条件将在每次测试中返回 true。你不认为你应该改变 static $originalsize = null;对于静态 $originalsize;或许可以测试 $currentsize 的值?
  • dabito,$currentsize 随函数的每次调用而变化(它是递归的)。 $originalsize 必须始终相同,从它在该条件语句中设置的第一个值开始。
【解决方案2】:
static $originalsize = $currentsize; ###### <-- LINE 66 ######

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

static $originalsize;
$originalsize = $currentsize;

【讨论】:

  • 很好的答案,但帕斯卡的信息更多。最好的答案都放在一起。
【解决方案3】:

引用php manual

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

【讨论】:

    【解决方案4】:

    来自php manual

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

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2012-12-09
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2014-03-23
      相关资源
      最近更新 更多