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
Форумы портала PHP.SU :: Версия для печати :: Редекларация функции
Форумы портала PHP.SU » » Вопросы новичков » Редекларация функции

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

1. for - 22 Марта, 2014 - 21:12:51 - перейти к сообщению
Всех приветствую форумчане, вообще сразу к вопросу. Есть index.php который с помощью свитча цепляет страницы и загружает их в блоке content.

PHP:
скопировать код в буфер обмена
  1. <!doctype html>
  2.  
  3. <head>
  4.     <title>Test</title>
  5.     <meta charset="utf-8">
  6.     <link href="css/style.css" rel="stylesheet" type="text/css">
  7. </head>
  8.  
  9. <body>
  10.         <?PHP
  11.     include "data.inc.php";
  12.     include "lib.inc.php";
  13.     include "bug.inc.php";
  14.     ?>
  15.     <div id="wrapper">
  16.  
  17.                 <div id="ip">
  18.                 <?PHP include "ip.inc.php"; ?>
  19.                 </div>
  20.         <div id="header">
  21.                 <?PHP require "header.inc.php"; ?>
  22.         </div>
  23.                 <div id="button">
  24.                 <?PHP include "button.inc.php"; ?>
  25.                 </div>
  26.         <div id="sidebarR">
  27.             <?PHP include "menuR.inc.php"; ?>
  28.                 </div>
  29.         <div id="content">
  30.             <?PHP
  31.                         //Проверяем пришли ли данные методом GET.
  32.             if (isset($_GET['id']) and !empty($_GET['id'])) {
  33.                                
  34.                                 //Фильтруем полученные значения.
  35.                 $id = clearData($_GET['id']);
  36.                                
  37.                
  38.                                 //Подключаем страницы в одном фрейме.
  39.                 if (isset($id)) {
  40.                     switch ($id) {
  41.                         case "search" :
  42.                             include "search.php"; break;
  43.                         case "article1" :
  44.                             include "article.php"; break;
  45.                         case "md5" :
  46.                             include "md5.php"; break;
  47.                                                 case "blog" :
  48.                                                         include "blogger.php"; break;
  49.                         default: include "index.php";
  50.                     }
  51.                 }
  52.             }
  53.                        
  54.             ?>
  55.         </div>
  56.         <div class="clear"></div>
  57.         <div id="footer">
  58.             <div id="leftCnt">Счетчик Rambler</div>
  59.             <div id="rightCnt">Правильный CSS</div>
  60.             <div id="phpVersion">
  61.                                 <?PHP include "footer.inc.php"; ?>
  62.             </div>
  63.         </div>
  64.     </div>
  65.  
  66. </body>
  67. </html>


К нему цепляется php страничка у которой формируется ссылка на удаление в цикле, так сказать на лету, передается все это дело методом GET.

PHP:
скопировать код в буфер обмена
  1. //Выводим содержимое с помощью цикла
  2. foreach($array as $result) {
  3.         $identif = $result['id'];
  4.         $name = $result['name'];
  5.         $email = $result['email'];
  6.         $comment = $result['comment'];
  7.         $time = $result['time'];
  8.        
  9.         print <<<ECHO
  10.         <hr><p style="color:#DC143C; font-weight:bold;">$time</p>
  11.         <p><a href="mailto:$email">$name</a> Оставил(а) комментарий: $comment</p>
  12.         <p align="right"><a href="{$_SERVER['REQUEST_URI']}?del=$identif">Удалить</a></p>
  13.        
  14.        
  15. ECHO;
  16. }


Есть еще либа у меня, откуда вызывается пользовательская функция которая отрисовывает меню и в этот момент происходит ошибка, редекларация, тоесть повторный вызов, в мане искал ответ на свой вопрос, пока что безуспешно.
Хотелось бы узнать как это дело можно обойти, или ж может есть какие то другие альтернативы.
2. caballero - 22 Марта, 2014 - 21:27:36 - перейти к сообщению
include_once
3. for - 22 Марта, 2014 - 21:29:19 - перейти к сообщению
caballero пишет:
include_once



Пробовал. ПечалькО.
4. Исильдур - 22 Марта, 2014 - 22:34:53 - перейти к сообщению
for
Редекларация это не повторный вызов, а повторное объявление функции.
Код ошибки в студию.
5. for - 22 Марта, 2014 - 22:59:26 - перейти к сообщению
Исильдур пишет:
for
Редекларация это не повторный вызов, а повторное объявление функции.
Код ошибки в студию.


Смысл тот же, можно и на техническом языке выражаться, только это не всегда удобно.
Какой еще код? Тут и так все по полочкам разложенно.
6. Исильдур - 22 Марта, 2014 - 23:10:18 - перейти к сообщению
for
Что по полочкам разложено?
Что происходит редекларация, а Вы полезли ман читать и ничего не нашли?
Перегрузка функций в php не предусмотрена, меняйте название функции, если include_once не прокатило.
7. esterio - 23 Марта, 2014 - 11:02:56 - перейти к сообщению
function_exists ?
8. for - 23 Марта, 2014 - 19:44:20 - перейти к сообщению
Исильдур пишет:
for
Что по полочкам разложено?
Что происходит редекларация, а Вы полезли ман читать и ничего не нашли?
Перегрузка функций в php не предусмотрена, меняйте название функции, если include_once не прокатило.


И? Поменяю название функи, что дальше? Она также будет редекларироваться.
Я знаю что такое редекларация, знаю почему она происходит.
(Добавление)
esterio пишет:
function_exists ?


Еху, возможно оно и так. Домой доберусь обязательно попробую.
Суть еще в том, если ближе к конкретике, то на лету метод GET нужен для того что бы на этой же странице его принять и послать SQL запрос на удаление записи из БД.
9. caballero - 23 Марта, 2014 - 19:52:59 - перейти к сообщению
угу
вместо исправления быдлоокода делаем костыль с function_exists
10. for - 23 Марта, 2014 - 19:58:39 - перейти к сообщению
caballero пишет:
угу
вместо исправления быдлоокода делаем костыль с function_exists


Ну дык, в Специалисте толкуют такие подходы реализации удаления записи из БД.
11. Исильдур - 23 Марта, 2014 - 20:04:21 - перейти к сообщению
Интересно, каким образом function_exists и удаление из БД связаны...
12. Panoptik - 23 Марта, 2014 - 21:58:58 - перейти к сообщению
есть правила для нормального кодирования (стандарты) называются PSR
так вот все из них вам еще не скоро сгодятся но там есть один маленький пункт в стандарте PSR-1
https://github[dot]com/php-fig/fig-s[dot][dot][dot]ding-standard[dot]md

в оригинале
Цитата:
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.


звучит примерно так

файлы должны либо декларировать сущности (классы, функции, константы) - собственно то что не может быть редекларировано

либо делать побочные эффекты (генерировать вывод, изменять настройки)

но не должны делать и то и другое


короче разделите включаемые (include) файлы на те что описаны и придерживайтесь того чтобы файлы в которых объявляются функции (библиотеки) включались один и ЕДИНСТВЕННЫЙ раз, а остальное уже по желанию
13. for - 27 Марта, 2014 - 19:37:19 - перейти к сообщению
Всех благодарю за отзывы, но function_exists не то что нужно было. Если задать условие с помощью данной функи, то и ссыль не отрисовывается на удаление записи.

В общем, решилось заменой одного символа и вуаля. Там трабла была с QUERY_STRING, после
я дописывал
PHP:
скопировать код в буфер обмена
  1. ?del=$identif
а нужно было
PHP:
скопировать код в буфер обмена
  1. &del=$identif
так как в REQUEST_URI уже лежал адрес
PHP:
скопировать код в буфер обмена
  1. ....index2?id=article1
склеиваются ж данные амперсандом, вот такие вот пироги. Улыбка

 

Powered by ExBB FM 1.0 RC1