PHP класс хлебных крошек

2012-10-30T12:45:03.887Z От

Я новичок в ООП, и мне любопытно, является ли приведенный ниже код объектно-ориентированным и может быть улучшен:

  class cTitleBreadcrumb {

 public function __construct ($ sAction, $ sItem ) {
 $ this-> sAction = $ sAction; 
 $ this-> sItem = $ sItem; 
} 

 открытая функция displayAction () {
 if ($ this-> checkUrlAction ($ this-> sAction ) === true) {
 return $ this- & gt; sAction; 
} 
} 
 открытая функция displayItem () {
 if ($ this- & gt; checkUrlItem ($ this- & gt; sItem) === true) { 
 return $ this- & gt; sItem; 
} 
} 
 приватная функция checkUrlAction ($ sAction) {

 if ($ sAction == 'insert' || $ sAction == 'view' || $ sAction == 'update '|| $ sAction ==' delete ') {
 return true; 
} 
} 

 приватная функция checkUrlItem ($ sItem) {
 if ($ sItem ==' imagelist '|| $ sItem ==' mkdir '| | $ sItem == 'rdir') {
 return true; 
} 
 else {
 $ objShowPDO = new mShowPDO (); 
 $ result = $ objShowPDO- & gt; allTables (); 
 while ($ array = $ result- & gt; fetch ()) {
 if ($ array [0] == $ this- & gt; sItem) {
 return true; 
} 
} 
} 
} 



 $ objTitleBreadcrumb = new cTitleBreadcrumb ($ sAction, $ sItem); 

 echo ucfirst ($ objTitleBreadcrumb- & gt; displayAction ()); 

 echo ucfirst ($ objTitleBreadcrumb- & gt; displayI (); предварительно>
            

Всего ответов: 2

Предложенный ответ:
2012-10-30T14:31:41.110Z От

Вы не всегда возвращаете что-либо

  закрытая функция checkUrlAction ($ sAction) {
 if (true) {
 return true; 
} 

 // но еще? 
} 
  

Внедрение зависимостей

$ objShowPDO = new mShowPDO (); плохо, экземпляр mShowPDO должен быть введен с помощью аргумента метода или конструктора, см. разделы внедрения зависимости

  закрытая функция checkUrlItem (mShowPDO $ objShowPDO, $ sItem) {
 if ($ sItem == 'imagelist '|| $ sItem ==' mkdir '|| $ sItem ==' rdir ') {
 return true; 
} 

 // резервировать и удалить еще 

 $ result = $ objShowPDO- & gt; allTables (); // возможно, вы можете вставить только результат 
 while ($ array = $ result- & gt; fetch ()) {
 if ($ array [0] == $ this- & gt; sItem) {
 return true; 
} 
 } 

 return false; 
} 
  

Жесткое кодирование

Контрольные списки действительно жестко запрограммированы (длинные, если есть отношения OR), попробуйте использовать некоторые контейнер для них (например, массив и использовать in_array ()).

Комментарии

@ Питер, ты имеешь в виду mysql_real_escape_string для mysql_ *?
0
Он означает, что для функций отображения вы всегда должны что-то возвращать. Если sAction не проходит вашу проверку, вы ничего не возвращаете из `displayAction ()` (и то же самое для displayItem).
0
Извините, но я не понимаю, как сюда приходит mysql_.
0
Привет, Питер, спасибо за ваш ответ. Что вы подразумеваете под тем, что Вы не всегда что-либо возвращаете и каково решение для этого внедрения зависимости?
0
ааа ладно я понимаю спасибо Но я не понимаю внедрения зависимости PDO, можете ли вы объяснить, в чем именно проблема и как можно правильно ее кодировать?
0
Посмотрите это, например: http://stackoverflow.com/questions/130794/what-is-dependency-injection
0
Предложенный ответ:
2012-10-30T17:47:52.220Z От

Просто небольшое улучшение, чтобы написать этот метод короче

  приватная функция checkUrlAction ($ sAction) 
 {
 return in_array ($ sAction, array ('insert', 'view', ' update''delete ')); 
} 
  

Комментарии

ааа ладно я понимаю спасибо Но я не понимаю инъекции зависимостей PDO, можете ли вы объяснить, в чем именно проблема и как можно правильно ее кодировать?
0
@ Питер поместил массив в поле класса, что ты имеешь в виду?
0
Рекомендую поместить массив в поле класса.
0
class cTitleBreadcrumb {private $ _actions = array (...)} и затем в операторе return: return in_array ($ sAction, $ this -> _ actions));
0

Рассказать всем