Я получаю сообщение об ошибке "Синтаксическая ошибка, неожиданная ошибка T_VARIABLE". Я не понимаю, что я делаю не так?

Я получаю эту ошибку: "Ошибка PHP Parse: синтаксическая ошибка, неожиданный T_VARIABLE в /var/www/vhosts/... в строке 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 ответа

Решение

Цитируя руководство (эта страница о статических свойствах, но то же самое относится и к переменным):

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

Вы используете это:

static $originalsize = $currentsize;

Который инициализируется выражением, а не константой.


И вот раздел руководства, который говорит то же самое о статических переменных:

Статические переменные могут быть объявлены, как видно из приведенных выше примеров. Попытка присвоить значения этим переменным, которые являются результатом выражений, приведет к ошибке разбора.

И, на всякий случай, вот о выражениях.


В вашем случае, чтобы избежать этой проблемы, я полагаю, вы могли бы изменить свой код, чтобы он выглядел так:

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

С этим:

  • Статическая переменная инициализируется константой
  • Если его значение является постоянным, присвойте динамическое значение.
static $originalsize = $currentsize; ###### <-- LINE 66 ######

Вы не можете передать переменную в качестве значения по умолчанию для статической переменной. Вместо этого сделайте следующее:

static $originalsize;
$originalsize = $currentsize;

Цитировать руководство по PHP:

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

Из руководства php:

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

Другие вопросы по тегам