Класс рейтинга

861
.
I'm the Cult of Personality...
Delphinum, Как вам будет угодно Сер.
А вобще я уже понял. Надо сделать 2 класа, один like ну а второй так и останитса vote )
.
BoGdAn, мне удобнее ссылками. Вот, в порядке прочтения:
1. https://ru.wikipedia.org/wiki/ ... вания
2. https://ru.wikipedia.org/wiki/GRASP (в частности про "Низкую связанность" и "Высокое сцепление")
3. https://ru.wikipedia.org/wiki/ ... ттерн
4. https://ru.wikipedia.org/wiki/ ... бъект
5. https://ru.wikipedia.org/wiki/ ... лоток
.
I'm the Cult of Personality...
Delphinum, То что я уже понял. Тем не менея спасибо.

Буду за пк сделаю как надо.
.
BoGdAn, возможно там больше 2 классов будет.
.
I'm the Cult of Personality...
Delphinum, Парсера еще отделить? Следуя прочтеному надо. Но не будет ли это слишком? Это я спрашываю как новачек опытного.
.
Delphinum
Класс может быть с одним методом внутри, это нормально. Классов много не бывает.
Выгода здесь будет в том, что класс парсера можно будет использовать в других проектах.
.
I'm the Cult of Personality...
Delphinum, Спасибо еще раз. Полезно. Я привык к многофункциональности, а оказываетса не там суть.
.
BoGdAn, Польза в повторном использовании кода.
.
I'm the Cult of Personality...
Каждый клас это отдельный файл
<?php
 /* *
  * Клас опитувань
  * Автор: BoGdAn/ARMYbodya <armybodya@gmail.com>
  * URL: https://weua.info/bogdan
  * Дата: 29 вересня 2014р
  * Оновлення: 12 грудня 2014р
  */
  
// Допоміжний клас парсера
class parseString { 
 
 /* *
  * Масив у лінію
  * 
  * @param array $arr масив
  * @return strsng 
  */
    function array_to_string($arr, $max = 0) { 
//return serialize($arr); 
        if($max == 1) 
            $str = implode(',', $arr);
        else {
            $count = count($arr);
            foreach($arr as $v) {
                $str .= implode(',' ,$v);
                if(++$i != $count)
                    $str .= '|';
            }
        }
        return $this->string($str);
    }


 /* *
  * Лінію у масив
  * 
  * @param strsng $str лінія
  * @return array 
  */
    function string_to_array($str, $max = 0) {
//return unserialize($str); 
        $str = $this->string($str);
        if($max == 1) { 
            if(empty($str)) return array();
                $arr = explode(',', $str);
        }
        else {
            $arr = array();
            $v = empty($str) ? array() : explode('|', $str);
            if(!$max) 
                $max = count($v);
            for($i = 0; $i <= ($max-1); ++$i)
                $arr[] = empty($v[$i]) ? array() : explode(',', $v[$i]);
        }
        return $arr;
    }


 /* *
  * "Вирівнює" масив
  * 
  * @param array $arr 
  * @return array 
  */
    function  to_flat_array($arr){  
        $out = array();  
        if(!is_array($arr)) 
            return $arr; 
        foreach($arr as $v) { 
            $req = $this->to_flat_array($v);
            if(is_array($req)) 
                $out = array_merge($out, $req);  
            else  
                $out[] = $req;  
        } 
        return $out; 
    } 


 /* *
  * Приберає переноси ліній
  * 
  * @param string $str лінія
  * @return string
  */
    function string($str) {
        $arr = array("\n" => '', "\r" => '', ' ' => '');
        return strtr($str, $arr);
    }
    
}

//////////////////////////////////////////

// Клас Like (мені подобається) 
class Like extends parseString {

 /* *
  * Масив із індетефікаторами 
  * 
  * @var array 
  */ 
    public $arr;


 /* *
  * Конструктор класу 
  * 
  * @param string $str лінія для обробки
  */
    function __construct($str) {
        $str = $this->string($str);
$this->arr = $this->string_to_array($str, 1);
    }


 /* *
  * Додаємо якщо немає/видаляєм якщо є ідентифікатор
  * 
  * @param string|int $id ідентифікатор
  * @return strsng віддає лінію із доданим/видалиним індетефікатором
  */
    function add($id) {
if(in_array($id, $this->arr)) { 
$arr_flip = array_flip($this->arr);
unset($arr_flip[$id]);
$this->arr = array_flip($arr_flip);
}
else 
$this->arr[] = $id;
return $this->array_to_string($this->arr, 1);
    }


 /* *
  * Кількість ідентифікаторів 
  * 
  * @return int  
  */
    function view() { 
return count($this->arr);
    }


 /* *
  * Чи є ідентифікатор в базі 
  * 
  * @param string|int $id ідентифікатор
  * @return bool  
  */
    function in_vote($id) { 
if(in_array($id, $this->arr))
return TRUE;
else 
return FALSE;
    }


 /* *
  * Отримуємо ідентифікатори опитаних
  * 
  * @return array  
  */
    function uslist() {
return $this->arr;
    }

}

///////////////////////////////////////////

// Клас Vote (Опитування) 
class Vote extends parseString { 

 /* *
  * Кількість варіантів відповіді
  * 
  * @var int
  */
    public $col_vote; 

 /* *
  * Масив із індетефікаторами 
  * 
  * @var array 
  */ 
public $arr;


 /* *
  * Конструктор класу 
  * 
  * @param string $str лінія для обробки
  * @param string $col_vote кількість варіантів відповіді
  */
    function __construct($str, $col_vote = 1) {
        $this->col_vote = $col_vote;
        $str = $this->string($str);
$this->arr = $this->string_to_array($str, $this->col_vote);
    }


 /* *
  * Додаємо якщо немає/видаляєм якщо є ідентифікатор
  * 
  * @param string|int $id ідентифікатор
  * @param int $id до якого варіанту відповіді додаєм/видаляєм ідентифікатор
  * число від 0 до $col_vote-1 
  * @return strsng віддає лінію із доданим/видалиним індетефікатором
  */
    function add($id, $cheng = 0) {
        $arr_p = array();
        foreach($this->arr as $mas) 
            if(in_array($id, $mas)) {
                $noadd = 1;
                $mas_flip = array_flip($mas);
                unset($mas_flip[$id]);
                $mas = array_flip($mas_flip);
                $arr_p[] = $mas; 
            }
            else  
                $arr_p[] = $mas;
        if(!isset($noadd))
            if(!is_array($arr_p[$cheng]))
                $arr_p[$cheng] = array($id);
            else
                $arr_p[$cheng][] = $id;
        return $this->array_to_string($arr_p);
    }


 /* *
  * Кількість ідентифікаторів 
  * 
  * @return array
  */
    function view() { 
        $r_arr = array();
        foreach($this->arr as $mas)
            $r_arr[] = count($mas);
        return $r_arr;
    }


 /* *
  * Чи є ідентифікатор в базі 
  * 
  * @param string|int $id ідентифікатор
  * @return array  
  */
    function in_vote($id) { 
        $r_arr = array();
        foreach($this->arr as $mas)
            if(in_array($id, $mas))
                $r_arr[] = TRUE;
            else 
                $r_arr[] = FALSE;
        return $r_arr;
    }


 /* *
  * Отримуємо ідентифікатори опитаних
  * 
  * @param string|int $cheng умова виводу
  * all - всі ідентифікатори 
  * число від 0 до $col_vote-1 для виводу ідентифікаторів одного з варіантів відповіді
  * @return array  
  */
    function uslist($cheng = 'all') {
        return $this->arr[$cheng];
        if($cheng == 'all') 
            return $this->to_flat_array($this->arr);
    }

}
Всего: 39