2015-05-06 3 views
0

это мой код:

usort($chartData, function ($a, $b) { 
    $aTotal = $this->getUserAggregate($a); 
    $bTotal = $this->getUserAggregate($b); 
    return $aTotal < $bTotal; 
}); 

И моя ошибка: PHP Fatal error: Using $this when not in object context

То, что я не понимаю, этот код работает отлично на моем собственном компьютере, но когда я его запускаю на моем собственном веб-сервере это ошибка.

Из-за ошибки я понимаю, что $this, похоже, выходит за рамки, но как я могу исправить это, чтобы он работал на всех машинах?

EDIT: здесь getUserTaskAggregates()

private function getUserTaskAggregate($data) 
{ 
    return ($data[Constants::ONE] + $data[Constants::TWO] + $data[Constants::THREE] + $data[Constants::FOUR] 
     + $data[Constants::STOCKED] + $data[Constants::PREVIOUSLY_STOCKED]); 
} 
+0

Вы в экземпляре метод? – Devon

ответ

0

была добавлена ​​поддержка $this внутри закрытия в PHP 5.4, так что это не будет работать с PHP 5.3. Если вы хотите, чтобы ваш код, чтобы быть портативным, вы должны сделать, чтобы что:

$that = $this; 
usort($chartData, function ($a, $b) use ($that) { 
    $aTotal = $that->getUserAggregate($a); 
    $bTotal = $that->getUserAggregate($b); 
    return $aTotal < $bTotal; 
}); 

Или вы можете обновить сервер с более свежей версией PHP, это было бы лучше;)

+0

Привет ... спасибо за ваш ответ. Да, обновление было бы хорошей идеей. В краткосрочной перспективе я попробовал ваше решение, и теперь он говорит «PHP Warning: usort(): Массив был изменен функцией сравнения пользователей». – b85411

+0

Это другая проблема. Вы можете увидеть некоторые объяснения здесь: http://stackoverflow.com/questions/3235387/usort-array-was-modified-by-the-user-comparison-function. IMO, проблема возникает из getUserAggregate(), которые каким-то образом изменяют ваши ссылки на диаграмму. –

Смежные вопросы