Роман Алискин: Нет пердела совершенству ᐯ

Позавчера написал:
class EndPageRndContent {

    private $rnd;
    private $rnd_obj;

    public function __construct() {
        $this->rnd = rand(1, 6);
        switch ($this->rnd) {
            case 1:             //пользователи
                $this->rnd_obj = new RndUsers(4);
                break;
            case 2:             //посты
                $this->rnd_obj = new RndPosts(2);
                break;
            case 3:             //посткоменты
                $this->rnd_obj = new RndPostComs(1);
                break;
            case 4:             //картинки
                $this->rnd_obj = new RndFotos(4);
                break;
            case 5:             //фотокоменты
                $this->rnd_obj = new RndFotoComs(1);
                break;
            case 6:             //фотоалбомы
                $this->rnd_obj = new RndAlbums(4);
                break;
            default:            //ВСЕГДА В КЕЙСАХ ...!!!
                echo 'rnd_err def exit';
                $e = new Err();
                $e->logerr_exit('rnd_err def exit ' . __METHOD__ . ' in ' . __FILE__ . ' on ' . __LINE__);
                break;
        }
    }
}
Вчера переписал:
class RndContentEndPage {

    private $rnd;               //какой нужно выбирать
    private $cou_rnd_obj;       //количество в масссиве -1 (нум с нуля)
    private $selected_rnd_obj;  //выбран из массива
    private $how_show_rnd_cont; //сколько элементов показывать
    private $rnd_obj;
    private $tmp_wsh;
    private $rnd_ar = ['RndUsers', 'RndPosts','RndPostComs','RndFotos','RndFotoComs',
      'RndAlbums','RndComPics'];

    public function __construct() {
        $this->cou_rnd_obj = count($this->rnd_ar) - 1;
        $this->rnd = rand(0, $this->cou_rnd_obj);   //нумерац с 0
        $this->selected_rnd_obj = $this->rnd_ar[$this->rnd];
        $this->how_show_rnd_cont = rand(1, 4);
        $this->rnd_obj = new $this->selected_rnd_obj($this->how_show_rnd_cont);
   }
}
Сегодня еще раз переписываю...
class RndContentEndPage {

    private $rnd;               //какой нужно выбирать
    private $cou_rnd_obj;       //количество в масссиве -1 (нум с нуля)
    private $selected_rnd_obj;  //выбран из массива
    private $how_show_rnd_cont; //сколько элементов показывать
    private $rnd_obj;
    private $tmp_wsh;
    private $rnd_ar = ['RndPostComs', 'RndFotoComs', 'RndPosts', 'RndUsers',
      'RndAlbums', 'RndFotos', 'RndComPics'];

    public function __construct() {
        $this->cou_rnd_obj = count($this->rnd_ar) - 1;
        $this->rnd = rand(0, $this->cou_rnd_obj);   //нумерац с 0
        $this->selected_rnd_obj = $this->rnd_ar[$this->rnd];
        $this->set_how_show_rnd_cont();
        $this->rnd_obj = new $this->selected_rnd_obj($this->how_show_rnd_cont);
    }

    private function set_how_show_rnd_cont() {  //лучше несколько прсостых условий, чем какая-то хрень
        if ($this->rnd < 2) {
            $this->how_show_rnd_cont = 1;
        }
        if ($this->rnd == 2 ) {
            $this->how_show_rnd_cont = 2;
        }
        if ($this->rnd > 2 ) {
            $this->how_show_rnd_cont = 4;
        }
    }
}
Добавил я
$this->set_how_show_rnd_cont(); //в зависимости от того какой случайный контент показывать
этой строчкой устанавливается количество случайного контента для вывода

БЫЛО
$this->how_show_rnd_cont = rand(1, 4); //от 1 до 4 элементов
Если вывод 4 картинок или 4 фотоальбомов смотрится более-менее, то вывод 4 постов или 4 комментов выглядит уже не очень красиво (один коммент может быть на две(!) страницы монитора). Раньше в скобках было указано сколько нужно случайного контента выводить.
          case 1:             //пользователи
                $this->rnd_obj = new RndUsers(4);
                break;
            case 2:             //посты
                $this->rnd_obj = new RndPosts(2);
                break;
            case 3:             //посткоменты
                $this->rnd_obj = new RndPostComs(1);
                break;
            case 4:             //картинки
                $this->rnd_obj = new RndFotos(4);
                break;
            case 5:             //фотокоменты
                $this->rnd_obj = new RndFotoComs(1);
                break;
            case 6:             //фотоалбомы
                $this->rnd_obj = new RndAlbums(4);
                break;
Зачем всё это запердельн... запредельное совершенствование?
Теперь если нужно будет добавить еще какой-то случайный контент, то я вписываю класс

    private $rnd_ar = ['RndPostComs', 'RndFotoComs', 'RndPosts', 'RndUsers',
      'RndAlbums', 'RndFotos', 'RndComPics', 'СлучайныйНовыйКонетен'];

Всё!
Ну и возможно чуток условие изменю в set_how_show_rnd_cont() - ребята, которые в теме, поймут.
И так постоянно со всем кодом.
view 0
Роман Алискин
создатель tbs-mbs
desc
Для добавления комментариев выполните вход на сайт