Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Передача переменной в класс

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Coder1994
Отправлено: 24 Декабря, 2010 - 16:15:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Вот файл вызова класса:
PHP:
скопировать код в буфер обмена
  1. # Смотрим, если есть юзер то выполняем нужные нам действия
  2. if(isset($user)){
  3. ....
  4. $elements = $user['elements'];
  5. }
  6. if(!isset($user)){
  7. .....
  8. $elements = '10';
  9. }
  10. require_once(H."/functions/paging.inc.php");
  11. $_PAGING = new Paging($mysqli, $elements);

Вот начало класса:
PHP:
скопировать код в буфер обмена
  1. <?
  2. class Paging {
  3.  
  4. private $elements = 5;
  5. private $link_padding = 10;
  6. private $page_link_separator = ' ';
  7. private $next_page_text = 'Далее->';
  8. private $prev_page_text = '<-Назад';
  9. private $result_text_pattern = 'Показано с %s по %s из %s';
  10. private $page_var = 'p';
  11.  
  12. private $mysqli;
  13. private $q;
  14. private $total_rows;
  15. private $total_pages;
  16. private $cur_page;
  17. ....
  18.  

(Отредактировано автором: 24 Декабря, 2010 - 16:28:14)

 
 Top
Djin_dj
Отправлено: 24 Декабря, 2010 - 16:17:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




А чего и куда передавать собрался!?
 
 Top
Coder1994
Отправлено: 24 Декабря, 2010 - 16:18:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Так вот такая проблема что переменная elements уже имеет значение, и в классе присваивать ей значение незачем, но как только я делаю private $elements; класс постраничной навигации вовсе забывает что такое страницы. он тупо выводит все элементы на одной странице. В чём проблема?
Djin_dj пишет:
А чего и куда передавать собрался!?

Классу передаю $elements
сделал вывод данной переменной из класса, её значение почему-то 0, а до передачи в класс 10.

(Отредактировано автором: 24 Декабря, 2010 - 16:21:31)

 
 Top
Djin_dj
Отправлено: 24 Декабря, 2010 - 16:27:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Coder1994 пишет:
Так вот такая проблема что переменная elements уже имеет значение, и в классе присваивать ей значение незачем, но как только я делаю private $elements; класс постраничной навигации вовсе забывает что такое страницы. он тупо выводит все элементы на одной страницы. В чём проблема?

А где
PHP:
скопировать код в буфер обмена
  1. __construct($elem){
  2. $element = $elem;
  3. }

Сунь туда
PHP:
скопировать код в буфер обмена
  1. $A = new Paging($a);
  2. echo $A->element;
и тогда
будет щастье

(Отредактировано автором: 24 Декабря, 2010 - 16:27:53)

 
 Top
Coder1994
Отправлено: 24 Декабря, 2010 - 16:32:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Djin_dj пишет:
Coder1994 пишет:
Так вот такая проблема что переменная elements уже имеет значение, и в классе присваивать ей значение незачем, но как только я делаю private $elements; класс постраничной навигации вовсе забывает что такое страницы. он тупо выводит все элементы на одной страницы. В чём проблема?

А где
PHP:
скопировать код в буфер обмена
  1. __construct($elem){
  2. $element = $elem;
  3. }

Сунь туда
PHP:
скопировать код в буфер обмена
  1. $A = new Paging($a);
  2. echo $A->element;
и тогда
будет щастье

Вот весь класс:
PHP:
скопировать код в буфер обмена
  1. <?
  2. class Paging {
  3. private $elements = 5;
  4. private $link_padding = 10;
  5. private $page_link_separator = ' ';
  6. private $next_page_text = 'Далее->';
  7. private $prev_page_text = '<-Назад';
  8. private $result_text_pattern = 'Показано с %s по %s из %s';
  9. private $page_var = 'p';
  10.  
  11. private $mysqli;
  12. private $q;
  13. private $total_rows;
  14. private $total_pages;
  15. private $cur_page;
  16.  
  17. public function __construct($mysqli, $q='', $page_var='p')
  18. {
  19.     $this->db = $mysqli;
  20.     if ($q) $this->set_query($q);
  21.     $this->page_var = $page_var;
  22.     $this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
  23. }
  24.  
  25. public function set_query($q)
  26. {
  27.     $this->q = $q;
  28. }
  29.  
  30. public function set_elements($elements)
  31. {
  32.     $this->elements = abs((int)$elements);
  33. }
  34.  
  35. public function set_link_padding($padding)
  36. {
  37.     $this->link_padding = abs((int)$padding);
  38. }
  39.  
  40. public function get_page($q='')
  41. {
  42.     if ($q) $this->set_query($q);
  43.  
  44.     $r = $this->db->query( $this->query_paging($this->q) );
  45.     $this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());
  46.  
  47.     if ($this->elements !== 0) $this->total_pages = ceil($this->total_rows/$this->elements);
  48.    
  49.     if ($this->cur_page > $this->total_pages)
  50.     {
  51.         $this->cur_page = $this->total_pages;
  52.         if ( $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) );
  53.     }
  54.    
  55.     return $r;
  56. }
  57.  
  58. public function get_result_text()
  59. {
  60.     $start = (($this->cur_page-1) * $this->elements)+1;
  61.     $end = (($start-1+$this->elements) >= $this->total_rows)? $this->total_rows:($start-1+$this->elements);
  62.  
  63.     return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
  64. }
  65.  
  66. public function get_page_links()
  67. {
  68.     if ( !isset($this->total_pages) ) return '';
  69.  
  70.     $page_link_list = array();
  71.  
  72.     $start = $this->cur_page - $this->link_padding;
  73.     if ( $start < 1 ) $start = 1;
  74.     $end = $this->cur_page + $this->link_padding-1;
  75.     if ( $end > $this->total_pages ) $end = $this->total_pages;
  76.  
  77.     if ( $start > 1 )  $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
  78.     for ($i=$start; $i <= $end; $i++)  $page_link_list[] = $this->get_page_link( $i );
  79.     if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
  80.     if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );
  81.  
  82.     return implode($this->page_link_separator, $page_link_list);
  83. }
  84.  
  85. public function get_next_page_link()
  86. {
  87.     return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
  88. }
  89.  
  90. public function get_prev_page_link()
  91. {
  92.     return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
  93. }
  94.  
  95. private function get_page_link($page, $text='')
  96. {
  97.     if (!$text)    $text = $page;
  98.  
  99.     if ($page != $this->cur_page)
  100.     {
  101.         $reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
  102.         $url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
  103.         $url = str_replace('&', '&', $url);
  104.         return '<a href="'.$url.'">'.$text.'</a>';
  105.     }
  106.     return '<span>'.htmlspecialchars($text).'</span>';
  107. }
  108.  
  109. private function query_paging()
  110. {
  111.     $q = $this->q;
  112.  
  113.     if ($this->elements != 0)
  114.     {
  115.         //calculate the starting row
  116.         $start = ($this->cur_page-1) * $this->elements;
  117.         //insert SQL_CALC_FOUND_ROWS and add the LIMIT
  118.         $q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->elements}";
  119.     }
  120.  
  121.     return $q;
  122. }
  123. }
  124. ?>

Можешь сам вставить?

(Отредактировано автором: 24 Декабря, 2010 - 16:33:30)

 
 Top
Djin_dj
Отправлено: 24 Декабря, 2010 - 16:41:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Coder1994 пишет:
Можешь сам вставить?

Ну во-первых
PHP:
скопировать код в буфер обмена
  1. $_PAGING = new Paging($mysqli, $elements);

а где ты передаешь $q!?
PHP:
скопировать код в буфер обмена
  1. $_PAGING = new Paging($mysqli,false, $elements);

так наверное
и в construct надо
PHP:
скопировать код в буфер обмена
  1. $this->page_var = $this->elements = $page_var;
 
 Top
Coder1994
Отправлено: 24 Декабря, 2010 - 16:41:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Всё сам разобрался.
Решение проблемы:
PHP:
скопировать код в буфер обмена
  1. <?
  2. ....
  3. public function __construct($mysqli, $elements, $q='', $page_var='p')
  4. {
  5.     $this->elements = $elements;
  6.     $this->db = $mysqli;
  7.     if ($q) $this->set_query($q);
  8.     $this->page_var = $page_var;
  9.     $this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
  10. }
  11. ...
  12. ?>

Всем спасибо!

(Отредактировано автором: 24 Декабря, 2010 - 16:42:54)

 
 Top
Djin_dj
Отправлено: 24 Декабря, 2010 - 16:47:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Тока ты учти в следующий раз что если ты в конструкторе присваиваешь по умолчанию значения, их надо при вызове указывать хотя бы пустыми строками
то есть
new a(1,2,3) не будет интерпретировано как
__construct(1,2, $q='',3)
класс должен выдать ошибку
так как ты не указал 3 элемент класса
 
 Top
JustUserR
Отправлено: 25 Декабря, 2010 - 16:50:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Djin_dj пишет:
new a(1,2,3) не будет интерпретировано как
__construct(1,2, $q='',3)
класс должен выдать ошибку
Для осуществления создания целевого метода принимающее вариативное число аргументов или значения которые могут не указываться по умолчанию - необходимо использования предшествующего порядка их расположения в сигнатуре вызова - таким образом чтобы фиксированные аргументы находились непосредственно вначале списка без включения элементов другого рода В общем случае осуществление схемы в указанием аргументов функции в произвольном параметре может быть досигнуто при использовании элементов управления функциям -в таком случае список переданных аргументов предоствляется в виде ассоциативного массива - в то время как обеспечения их присвоения локальным переменных может производиться на основе определения типа


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB