Я получаю «синтаксическую ошибку, неожиданную ошибку 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 } .... .... } 

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

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

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