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]   

> Описание: Нужна критика
Invert
Отправлено: 14 Декабря, 2010 - 09:10:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Здравствуйте.
Совсем недавно начал изучение ОО, поэтому некоторые нюансы мне непонятны. Также могу допускать грубые ошибки.

Необходима ваша консультация и критика: в нужном ли я направлении движусь? Какие ошибки допускаю? Что делать нужно, а что нет?

Для практики поставил себе задачу создать объект чтения и проверки GET и POST данных. Старался делать хорошо и гибко.

Вот что получилось:

PHP:
скопировать код в буфер обмена
  1.  
  2. // Извлечение и проверка _GET и _POST данных :::::::::::::::
  3. // 14.12.2010  Версия: 1.0.20 ::::::::::::::::::::::::::::::
  4.  
  5. /*
  6. bool:результат = SetParameters ( array:имя_переменной=>метод_доступа ) - Установка имен параметров и методов, получение данных по параметрам
  7. bool:результат = CheckData ( int:тип_проверки ) - Проверка данных.
  8.         SET_ONE - Установлен хоть один параметр? Вернет TRUE если это так.
  9.         SET_ALL - Установлены все параметры? Вернет TRUE если это так.
  10.         FULL_ONE - Хоть один параметр имеет данные? Вернет TRUE если это так.
  11.         FULL_ALL - Все параметры имеют данные? Вернет TRUE если это так.
  12. array:данные = GetData () - Возврат ассоциативного массива с данными.
  13. Clear () - Очистка данных обьекта.
  14. Destroy () - Уничтожение обьекта.
  15. */
  16.  
  17. class GetPostProcessing {
  18.         // Параметры
  19.         const _GET = 'g';
  20.         const _POST = 'p';
  21.         const SET_ONE = 1;
  22.         const SET_ALL = 2;
  23.         const FULL_ONE = 3;
  24.         const FULL_ALL = 4;
  25.         //
  26.         private $Data;
  27. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  28.         // Конструктор - установка параметров при инициализации
  29.         function __construct ( $paramlist = FALSE ) {
  30.                 // Проверка наличия данных
  31.                 if ( $paramlist != FALSE ) {
  32.                         // Установка параметров
  33.                         $this->SetParameters ( $paramlist );
  34.                 }
  35.         }
  36. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  37.         // Установка параметров
  38.         public function SetParameters ( $paramlist = FALSE ) {
  39.                 $result = FALSE;
  40.                 // Проверяем массив ли
  41.                 if ( is_array ( $paramlist ) ) {
  42.                         // Это массив
  43.                         foreach ( $paramlist as $name => $method ) {
  44.                                 // Проверяем формат каждого параметра
  45.                                 if ( ( is_string ( $name ) === TRUE ) and ( is_string ( $method ) === TRUE ) ) {
  46.                                         $result = TRUE;
  47.                                         // Вызываем метод чтения данных
  48.                                         $this->Data [ $name ] = $this->_ReadData ( $name, $method );
  49.                                 } else {
  50.                                         // Ошибка формата параметра
  51.                                         $this->Data [ $name ] = FALSE;
  52.                                 }
  53.                         }
  54.                 }
  55.                 return $result;
  56.         }
  57. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  58.         // Проверка данных
  59.         public function CheckData ( $type = FALSE ) {
  60.                 // Считаем кол-во элементов массива, проверяем
  61.                 if ( $list_count = count ( $this->Data ) ) {
  62.                         // Определяем тип проверки
  63.                         switch ( $type ) {
  64.                                 case self::SET_ONE:
  65.                                         // Проверка отсутствия любого параметра
  66.                                         $check = 0;
  67.                                         foreach ( $this->Data as $name => $content ) {
  68.                                                 // Пошаговая проверка
  69.                                                 if ( $content !== NULL ) {
  70.                                                         // Параметр есть
  71.                                                         $check++;
  72.                                                 }
  73.                                         }
  74.                                         // Контрольная проверка
  75.                                         if ( $check >= 1 ) {
  76.                                                 // Нет отсутствующих параметров
  77.                                                 $result = TRUE;
  78.                                         } else {
  79.                                                 // Есть отсутствующие
  80.                                                 $result = FALSE;
  81.                                         }
  82.                                         break;
  83.                                 case self::SET_ALL:
  84.                                         // Проверка отсутствия всех параметров
  85.                                         $check = 0;
  86.                                         foreach ( $this->Data as $name => $content ) {
  87.                                                 // Пошаговая проверка
  88.                                                 if ( $content !== NULL ) {
  89.                                                         // Параметр есть
  90.                                                         $check++;
  91.                                                 }
  92.                                         }
  93.                                         // Контрольная проверка
  94.                                         if ( $list_count == $check ) {
  95.                                                 // Хоть один параметр есть
  96.                                                 $result = TRUE;
  97.                                         } else {
  98.                                                 // Все параметры отсутствуют
  99.                                                 $result = FALSE;
  100.                                         }
  101.                                         break;
  102.                                 case self::FULL_ONE:
  103.                                         // Проверка на "пустоту" любого параметра
  104.                                         $check = 0;
  105.                                         foreach ( $this->Data as $name => $content ) {
  106.                                                 // Пошаговая проверка
  107.                                                 if ( ( $content != '' ) and ( $content !== NULL ) ) {
  108.                                                         // Параметр не пустой
  109.                                                         $check++;
  110.                                                 }
  111.                                         }
  112.                                         // Контрольная проверка
  113.                                         if ( $check >= 1 ) {
  114.                                                 // Нет пустых параметров
  115.                                                 $result = TRUE;
  116.                                         } else {
  117.                                                 // Есть пустые
  118.                                                 $result = FALSE;
  119.                                         }
  120.                                         break;
  121.                                 case self::FULL_ALL:
  122.                                         // Проверка на "пустоту" всех параметров
  123.                                         $check = 0;
  124.                                         foreach ( $this->Data as $name => $content ) {
  125.                                                 // Пошаговая проверка
  126.                                                 if ( ( $content != '' ) and ( $content !== NULL ) ) {
  127.                                                         // Параметр не пустой
  128.                                                         $check++;
  129.                                                 }
  130.                                         }
  131.                                         // Контрольная проверка
  132.                                         if ( $list_count == $check ) {
  133.                                                 // Хоть один параметр не пустой
  134.                                                 $result = TRUE;
  135.                                         } else {
  136.                                                 // Все параметры пустые
  137.                                                 $result = FALSE;
  138.                                         }
  139.                                         break;
  140.                                 default:
  141.                                         // Ошибка типа проверки
  142.                                         $result = FALSE;
  143.                         }
  144.                 } else {
  145.                         // Ошибка, нет данных
  146.                         $result = FALSE;
  147.                 }
  148.                 return $result;
  149.         }
  150. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  151.         // Возврат данных
  152.         public function GetData () {
  153.                 // Извлекаем данные
  154.                 $result = $this->Data;
  155.                 return $result;
  156.         }
  157. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  158.         // Очистка обьекта
  159.         public function Clear () {
  160.                 $this->Data = FALSE;
  161.         }
  162. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  163.         // Уничтожение обьекта
  164.         public function Destroy () {
  165.                 unset ( $this );
  166.         }
  167. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  168.         // Чтение данных
  169.         private function _ReadData ( $name, $method ) {
  170.                 // Определяем метод доступа
  171.                 switch ( $method ) {
  172.                         case self::_GET:
  173.                                 // Получаем данные
  174.                                 $result = $_GET [ $name ];
  175.                                 break;
  176.                         case self::_POST:
  177.                                 // Получаем данные
  178.                                 $result = $_POST [ $name ];
  179.                                 break;
  180.                         default:
  181.                                 // Ошибка метода
  182.                                 $result = FALSE;
  183.                 }
  184.                 return $result;
  185.         }
  186. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  187. }
  188.  


И работа с объектом:

PHP:
скопировать код в буфер обмена
  1.  
  2. // Инициализация и извлечение данных
  3. $gpp = new GetPostProcessing ( array ( 'get_prm_name' => GetPostProcessing::_GET, 'post_prm_name' => GetPostProcessing::_POST ) );
  4. // Отдельно: извлечение данных
  5. $gpp->SetParameters ( array ( 'get_prm_name' => GetPostProcessing::_GET, 'post_prm_name' => GetPostProcessing::_POST ) );
  6. // Проверка данных
  7. if ( $gpp->CheckData ( GetPostProcessing::SET_ALL ) ) echo "Установлены все параметры! <br />";
  8. if ( $gpp->CheckData ( GetPostProcessing::SET_ONE ) ) echo "Установлен хоть один параметр! <br />";
  9. if ( $gpp->CheckData ( GetPostProcessing::FULL_ALL ) ) echo "Все параметры содержат данные! <br />";
  10. if ( $gpp->CheckData ( GetPostProcessing::FULL_ONE ) ) echo "Хоть один параметр содержит данные! <br />";
  11. // Получаем данные
  12. $GetPostData = $gpp->GetData ();
  13. // Очищаем обьект, если нужно.
  14. $gpp->Clear ();
  15. // Удаляем обьект
  16. $gpp->Destroy ();
  17.  


Заранее спасибо за помощь!
 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Декабря, 2010 - 09:22:45
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Чота как-то слишком заморочено и не понятно зачем нужно..
У меня оно одной ф-цией в ядре для проверки простых пост/гет:
PHP:
скопировать код в буфер обмена
  1.  
  2.         private function cleanstring($string,$lenght) {
  3.                 $string = substr(trim($string),0,$lenght);
  4.                 if(preg_match("/[0-9a-zа-я_]/i", $string)) {
  5.                         return $string;
  6.                         }
  7.                 else return false;
  8.                 }
 
 Top
Invert
Отправлено: 14 Декабря, 2010 - 09:37:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Что в голову первое пришло, то и сделал.
Что по существу скажете?
 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Декабря, 2010 - 09:54:22
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




А по существу парсингом данных занимается апач, проверкой - пхп. Т.е. парсить данные в пхп не вижу смысла. А проверять стоит только на $var != '' AND is_int() || is_string() как ожидаемый тип данных для конкретной задачи. Для полного ф-ционала добавить mysql_real_escape_string(). И все это завернуть в одну единственную ф-цию с несколькими аргументами, которые выставлять для условия проверки, будь то данные летящие в базу или это запрос вида page=4... Я же в коде привел простейший пример, и то что там регулярка - это как вариант.
 
 Top
Invert
Отправлено: 14 Декабря, 2010 - 10:03:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Спасибо, я все понимаю. =)
Вы представьте, что там не работа с ПОСТ\ГЕТ, а какие-то сложные вычисления - мне бы советы по философии ООП и структуре объектов.
 
 Top
DlTA
Отправлено: 14 Декабря, 2010 - 10:40:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




Invert пишет:
Вы представьте, что там не работа с ПОСТ\ГЕТ,
а тогда и сай работать не будет, и толку от класса никакого
(Добавление)
а по тексту класса
мне как не писавшему этот код очень сильно не хватает осмысленных коментов, (что и зачем), ибо комент "Установка параметров" и ему подобные не информативны, и в заголовке как то не сильно понятно зачем это все
 
 Top
JustUserR
Отправлено: 14 Декабря, 2010 - 11:51:48
Post Id



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


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


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




DeepVarvar пишет:
А по существу парсингом данных занимается апач, проверкой - пхп
В общем случае осуществление анализа предплагаемого пользователем виртуального пути и строки запроса может производится программными средствами - поскольку Apache обеспечивает возможность получения всех синтаксических корректных запросов на обслуживаемых виртуальный хост - с последующей передачей их в CGI-скрипт посредством механизмов alias-инга и действенного перенапраления


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Декабря, 2010 - 12:04:45
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




JustUserR я про классический метод, а не про ЧПУ и прочие...
 
 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