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