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

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

Любая идея, что не так?

Ответ 1

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

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

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

static $originalsize = $currentsize;

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


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

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

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


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

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

С этим:

  • Статическая переменная инициализируется константой
  • Если его значение является константным, назначьте динамическое значение.

Ответ 2

static $originalsize = $currentsize; ###### <-- LINE 66 ######

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

static $originalsize;
$originalsize = $currentsize;

Ответ 3

Для цитирования php manual:

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

Ответ 4

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

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