Я получаю сообщение об ошибке "Синтаксическая ошибка, неожиданная ошибка T_VARIABLE". Я не понимаю, что я делаю не так? - PullRequest
3 голосов
/ 26 февраля 2011

Я получаю эту ошибку: «Ошибка синтаксического анализа 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
        }
    ....
    ....
}

Есть идеи, что случилось?

Ответы [ 4 ]

7 голосов
/ 26 февраля 2011

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

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

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

static $originalsize = $currentsize;

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


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

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

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


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

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

С этим:

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

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

static $originalsize;
$originalsize = $currentsize;
0 голосов
/ 26 февраля 2011

С php manual :

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

0 голосов
/ 26 февраля 2011

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

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

...