powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Двойное или тройное вхождение в функцию
12 сообщений из 12, страница 1 из 1
Двойное или тройное вхождение в функцию
    #38425389
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция FN_Print_Rubr() которая формирует вывод данных исходя из таблицы. Таблица имеет поля которые идут как данные а также в данных есть инструкция что и как делать (в каком виде выводить клиенту информацию). Есть 7 вложений (Таблица1->Таблица2->.....Таблица7). Данная функция выводит информацию по указанному селектору
Код: php
1.
$query= mysql_query("SELECT * FROM rubr".($row_per['priven']+1)." WHERE mkey=".$row_per['prid']);



Среди указаний инструкции есть одно особенное - нужно залезать на уровень глубже в следующую таблицу и выполнить все ее инструкции. Я делал это путем клонирования данной функции, только изменив чуть названия на FN_Print_Pidrubr()


Код: php
1.
2.
3.
4.
5.
function FN_Print_Pidrubr($id_vhid,$row_per_d,$query_d,$row,$end_first,$stLstprinttp){
	$query = mysql_query("SELECT * FROM rubr".($row_per_d['priven']+2)." WHERE mkey=".$id_vhid);
..........
В этой функции все то самое что и в предыдущей кроме запроса
..........



Так как доработки ведутся постоянно и каждый раз нужно не забыть все продублировать - возник вопрос: Могу я использовать вызов функции внутри той же функции. Я представляю себе это так...
Код: php
1.
2.
3.
4.
5.
6.
FN_Print_Rubr(){
  global $GlibinaFN;
...........................
  if($thPdp==1){$GlibinaFN=1;FN_Print_Rubr();$GlibinaFN=0;}
.....................
}



Не знаю только можно ли так делать и что будет если по ошибке что-то пойдет не так и не повиснет ли там сервер?
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38425415
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал теорию на практике. На небольшом фрагменте скрипта работает все успешно. Управление передается еще раз в ту самую функцию в которой все работает как с чистого листа кроме заявленных в global переменных.
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38425506
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чесно говоря не понятно что вы делаете, зачем городить 7 таблиц и делать подобие рекурсии, сделайте одну таблицу и внутри организуйте дерево, соотношения легко делать.
У вас вероятно 7 каких-то рубрик, а если я захочу сделать еще одну? городить очередную таблицу? и менять программный код?
Использовать глобальные переменные внутри функции не есть хорошо, это усложняет понимание того что она вообще делает ($GlibinaFN - вообще не понять что это такое - вероятно какой-то флаг который сигнализирует об окончании рекурсивного обращения, в случае ошибки где-либо вы вообще не найдете где эта переменная меняется). Есть ситуации в которых использование глобальных переменных оправдано, например, объекты соединения с базами, ресурсы открытых файлов и тд
Желательно бы уже переходить на PDO, и не использовать устаревшие функции серии mysql_*, выкиньте старые книги по PHP
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38425792
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все под контролем. Я справляюсь. Зато очень удобно и быстро настраивать внешний вид ввода и вывода информаци, а также поиск
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38425827
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Чувак, ты что рекурсию заново изобретаешь? С каких х... тебя вообще на эту работу взяли???
Книжки пробовал читать хоть какие-то?
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426035
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikkiMouse,

Я книги почти не читаю. Там как раз то что нужно - опущено. Отличным программистам нет времени на написание нормальной книги + с каждым годом все морально устаревает.

"С каких х... тебя вообще на эту работу взяли???"
Я ни на кого не работаю. Сам на себя.
А вот постоянно стыкаюсь с подобным. К примеру оплатил услуги на год (учу английский на сайте). В проэкте работает 34 программиста. Прошу сделать маленькую деталь, так как очень трудно и неудобно так как есть. И так уже 3 месяца никто ничего не меняет. Так что про "работу" мне все известно.

Работал на вводом данных
YouTube Video
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426037
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На видео может не все показал как надо. Есть рубрики-подрубрики. В каждой рубрики полностью свои элементы (не успел показать, можно понять если внимательно посмотрите). Все вспомогательные данные внесены (много всего....порода кошек если захотите кота продать и т.д.)

Двойной вход в функцию был необходим так как есть несколько элементов, к примеру элемент [Checkbox+++] (я его так назвал для себя) который подгружает данные на уровень глубже. На видео видно эти элементы. Там соблюдается отступ слева, а на самом деле в таблице данные находятся в глубине. Именно из-за этого надо было использовать двойное вхождение.

Результат просчитываю только один раз и сохраняю готовый html код (то что будет на вывод показывать) в отдельное поле, так что алгоритм используется только при сохранении данных. Когда пользователь захочет что-то отредактировать, его данные отдельно сохранены. Название полей прописаны. Чтоб не париться с каждой рубрикой отдельно и не думать над названием полей - этим мне помогает другая программа сделана на VB6.
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426062
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой способ построить дерево в рамках одной таблице это добавить в ней 2 технологических поля, это, например,
parentId и level
первое ссылается на ID родителя, а второе показывает уровень вложений (можно и без него).
Как вы говорите можно не париться ни с чем, легко получить данные по выбранному родителю (0- корневые элементы), не нужно городить кучу таблиц и лишнего программного кода, такое дерево легко обойти полностью и частично, нет ограничений по вложенности и легко добавляются уровни, сама по себе рекурсия для обхода такого дерева тоже простая, не нужно городить глобальной переменной с флагом как у вас. Конечно есть другие виды деревьев, получше, где меньше обращений в базу данных и возможно более быстрых
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426695
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаю. Можно было все на MySQL повесить, но на вывод данных мне важно использовать собственный формат. На словах так не объяснить, короче за одно выполнение должно показать все. Есть элементы к примеру "Шаблон Combo" где указан индекс с которого нужно брать значения. К примеру это "цвет". Он используется и для автомобилей и для мотоциклов (хоть он в другой рубрике)... Могу так и "рубрику шаблон" полностью указать, чтоб не дублировать данные в дереве снова. В MSAccess очень удобно работать с вложенными таблицами. Как вы видели синхронизация с сервером MySQL делается за секунды. Повторюсь: такой код будет использоваться только для сохранения данных в отдельное поле, цель которого быстрое чтение готового HTML.
2. У меня есть алгоритм, который базу MySQL преобразовывает в код PHP, в набор условий, когда число превращается в бинарное. К примеру узнать по индексу значения с числа 13254 можно за 14 операций (11001111000110). Скорость выполнения такого действия в отличии от MySQL 6*10 -5 c.

С трудом верится ?
}
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>KIA<? }
                    if($b01=='1'){?>LDV<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>LOHR<? }
                    if($b01=='1'){?>MAGIRUS<? }
                   }
                  }
                 }
                }elseif($b05=='1'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>MAN<? }
                    if($b01=='1'){?>MAZDA<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>MERCEDES BENZ<? }
                    if($b01=='1'){?>MITSUBISHI<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>NISSAN<? }
                    if($b01=='1'){?>PEGASO<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>RENAULT<? }
                    if($b01=='1'){?>SCANIA<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>SCHMITZ<? }
                    if($b01=='1'){?>STEYR<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>STILL<? }
                    if($b01=='1'){?>TATA<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>TOYOTA<? }
                    if($b01=='1'){?>UNIMOG<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>VOLKSWAGEN<? }
                    if($b01=='1'){?>VOLVO<? }
                   }
                  }
                 }
                }
               }elseif($b06=='1'){
                if($b05=='0'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>ГАЗ<? }
                    if($b01=='1'){?>ЗИЛ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>КАМАЗ<? }
                    if($b01=='1'){?>КРАЗ<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>МАЗ<? }
                    if($b01=='1'){?>УАЗ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>AUTOSAN<? }
                    if($b01=='1'){?>CHEVROLET<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>CHRYSLER<? }
                    if($b01=='1'){?>CITROEN<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>DAF<? }
                    if($b01=='1'){?>DODGE<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>FIAT<? }
                    if($b01=='1'){?>FORD<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>GMC<? }
                    if($b01=='1'){?>HYUNDAI<? }
                   }
                  }
                 }
                }elseif($b05=='1'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>Isuzu<? }
                    if($b01=='1'){?>IVECO<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>KIA<? }
                    if($b01=='1'){?>LDV<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>LUBLIN<? }
                    if($b01=='1'){?>MARCOPOLO<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>MERCEDES BENZ<? }
                    if($b01=='1'){?>MITSUBISHI<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>NISSAN<? }
                    if($b01=='1'){?>OPEL<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>PEUGEOT<? }
                    if($b01=='1'){?>RENAULT<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>SEAT<? }
                    if($b01=='1'){?>TOYOTA<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>VOLKSWAGEN<? }
                    if($b01=='1'){?>VOLVO<? }
                   }
                  }
                 }
                }
               }
              }
             }elseif($b08=='1'){
              if($b07=='0'){
               if($b06=='0'){
                if($b05=='0'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>ГАЗ<? }
                    if($b01=='1'){?>ЗАЗ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>РАФ<? }
                    if($b01=='1'){?>УАЗ<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>CITROEN<? }
                    if($b01=='1'){?>DAF<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>ERF<? }
                    if($b01=='1'){?>FAW<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>FIAT<? }
                    if($b01=='1'){?>FORD<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>FOTON<? }
                    if($b01=='1'){?>IFA<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>ISUZU<? }
                    if($b01=='1'){?>IVECO<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>JAC<? }
                    if($b01=='1'){?>KIA<? }
                   }
                  }
                 }
                }elseif($b05=='1'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>LDV<? }
                    if($b01=='1'){?>LOHR<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>MAGIRUS<? }
                    if($b01=='1'){?>MAN<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>MAZDA<? }
                    if($b01=='1'){?>MERCEDES BENZ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>MITSUBISHI<? }
                    if($b01=='1'){?>NISSAN<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>PEGASO<? }
                    if($b01=='1'){?>RENAULT<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>SCANIA<? }
                    if($b01=='1'){?>SCHMITZ<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>STEYR<? }
                    if($b01=='1'){?>STILL<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>TATA<? }
                    if($b01=='1'){?>TOYOTA<? }
                   }
                  }
                 }
                }
               }elseif($b06=='1'){
                if($b05=='0'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>UNIMOG<? }
                    if($b01=='1'){?>VOLKSWAGEN<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>VOLVO<? }
                    if($b01=='1'){?>ГАЗ<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>ЗИЛ<? }
                    if($b01=='1'){?>КАМАЗ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>КРАЗ<? }
                    if($b01=='1'){?>МАЗ<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>УАЗ<? }
                    if($b01=='1'){?>ADIGE<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>CARMIX<? }
                    if($b01=='1'){?>CIFA<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>DAF<? }
                    if($b01=='1'){?>FIORI<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>FORD<? }
                    if($b01=='1'){?>HANIA<? }
                   }
                  }
                 }
                }elseif($b05=='1'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>HOWO<? }
                    if($b01=='1'){?>IVECO<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>LEEBOY<? }
                    if($b01=='1'){?>MACK<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>MAN<? }
                    if($b01=='1'){?>MERCEDES BENZ<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>MERLO<? }
                    if($b01=='1'){?>PEGASO<? }
                   }
                  }
                 }elseif($b04=='1'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>RAIMONDI<? }
                    if($b01=='1'){?>RENAULT<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>SCANIA<? }
                    if($b01=='1'){?>SISU<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>SPITZER<? }
                    if($b01=='1'){?>STETTER<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>STEYAR<? }
                    if($b01=='1'){?>TATRA<? }
                   }
                  }
                 }
                }
               }
              }elseif($b07=='1'){
               if($b06=='0'){
                if($b05=='0'){
                 if($b04=='0'){
                  if($b03=='0'){
                   if($b02=='0'){
                    if($b01=='0'){?>TERBERG<? }
                    if($b01=='1'){?>TEREX<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>VOLVO<? }
                    if($b01=='1'){?>КАМАЗ<? }
                   }
                  }elseif($b03=='1'){
                   if($b02=='0'){
                    if($b01=='0'){?>КРАЗ<? }
                    if($b01=='1'){?>DAF<? }
                   }elseif($b02=='1'){
                    if($b01=='0'){?>ERF<? }
                    if($b01=='1'){?>FODEN<? }
                   }





А что говорят книги по этому поводу ?
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426742
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой подводный камень о котором книга меня не предупредила
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38426905
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем вам надо сюда http://govnokod.ru/php с вашим стилем программирования
...
Рейтинг: 0 / 0
Двойное или тройное вхождение в функцию
    #38434192
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно. Я не спорю. Я просто так считаю. Если б я знал как понимает код машина, знал бы точто что и как делать. Сделал тест - результат показывает работу в сотни раз быстрей, той о которой пишут в книге. А смотрю видеофорумы, где молятся над чар, варчар, и каждую мелочь 15 минут рассосоливают и мне спать хочется от их философии.

Любой умный код = говнокод, если он не работает на собственный кошелек, и в большинстве случаях мы используем каждый день этот г.. код принимая его за ценность, поскольку все его используют. через два-три года 4х ядерный комп операционку не потянет из-за фантазии программистов а мы тут мелочимся кодовой грамматикой.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Двойное или тройное вхождение в функцию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]