|
|
|
| Пишу класс, а там функция сортировки массива. Выглядит это так
class array_class {
public $array_; // массив с которым работаем
public $sort_by; // параметр по которму сортируем массив
//// далее функция сортировки массива
public function sort_array() {
function sort_function($a, $b) {
return strcmp($a[$this->sort_by], $b[$this->sort_by]);
}
usort ($this->array_, "sort_function");
}
};
//// Вызов класса
$array_class = new array_class();
$array_class->array_=$my_array;
$array_class->sort_by='position';
$array_class->sort_array();
|
Так вот это все дело выдает ошибку: Fatal error: Using $this when not in object context in в строке
return strcmp($a[$this->sort_by], $b[$this->sort_by]);
|
Не пойму как сделать. Кучу вариантов перепробовал. Помогите, пожалуйста. | |
|
|
|
|
|
|
|
|
для: Тень&
(26.06.2010 в 18:24)
| | не разобрался :(
можно на моем примере? | |
|
|
|
|
|
|
|
для: neokortex
(26.06.2010 в 18:27)
| | Ну сначала скажи свою версию PHP. Пример будет для PHP 5.3.0 и выше. | |
|
|
|
|
|
|
|
для: Тень&
(26.06.2010 в 18:29)
| | 5.2.4 А универсального решения нет? Может логику изменить или так и придется все ручками все время прописывать? | |
|
|
|
|
|
|
|
для: neokortex
(26.06.2010 в 18:33)
| | Тогда http://ru.php.net/manual/en/function.create-function.php, но, чую, скоро там будет надпись "deprecated" | |
|
|
|
|
|
|
|
для: neokortex
(26.06.2010 в 18:33)
| | А что у вас за массив и что должно быть результатом сортировки? Кусочек массива покажите, и результат его сортировки. | |
|
|
|
|
|
|
|
для: neokortex
(26.06.2010 в 18:10)
| | дык ить контекст класса-то в обычной функции теряется... | |
|
|
|
|
|
|
|
для: neokortex
(26.06.2010 в 18:10)
| |
// <?php
class array_class {
public $array_; // массив с которым работаем
public $sort_by; // параметр по которму сортируем массив
private function sort_function($a, $b) {
return strcmp($a[$this->sort_by], $b[$this->sort_by]);
}
//// далее функция сортировки массива
public function sort_array() {
usort ($this->array_, array($this, "sort_function"));
}
};
|
| |
|
|
|
|
|
|
|
для: sms-send
(26.06.2010 в 20:23)
| | Вы же не пробовали запустить этот код, не так ли? | |
|
|
|
|
|
|
|
для: Trianon
(26.06.2010 в 20:24)
| | Пробовал, всё прекрасно работает. | |
|
|
|
|
|
|
|
для: sms-send
(26.06.2010 в 20:27)
| | пардон.. проглядел второй аргумент usort | |
|
|
|
|
|
|
|
для: sms-send
(26.06.2010 в 20:23)
| | Неприятность в том, что метод сравнения для сортировки как бы не относится к классу array_class. Не ООПшно. Поэтому тут должна быть только лямбда/анонимная функция. | |
|
|
|
|
|
|
|
для: Тень&
(26.06.2010 в 21:52)
| | Я всего лишь исправил вариант автора на идентичный, но работающий.
ООПшно можно определить интерфейс Comparer и реализовывать его сколько угодно раз с нужными вариантами метода (обходясь без анонимных функций).
По предложенной автором версии не видно, чтобы его волновала эта проблема. Возможно ещё не дошёл до этой части, а возможно в этом классе действительно нужен единственный вариант сравнения. | |
|
|
|