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

 PHP.SU

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


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

> Описание: просто выпадаю в осадок погружаясь глубже))
DlTA
Отправлено: 18 Ноября, 2010 - 23:04:48
Post Id



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


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


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




в общем правил код и наше для себя чет совсем новое
пример кода (упрощенный)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   function view()
  3.   {
  4.     function view1()
  5.     {
  6.       echo "1 <br>";
  7.     }
  8.     function view2()
  9.     {
  10.       echo "2 <br>";
  11.     }
  12.     view1();
  13.     view2();
  14.   }
  15.   function viewbold()
  16.   {
  17.     function view1()
  18.     {
  19.       echo "<b>1</b> <br>";
  20.     }
  21.     function view2()
  22.     {
  23.       echo "<b>2</b> <br>";
  24.     }
  25.     view1();
  26.     view2();
  27.   }    
  28.   viewbold(); // 1
  29.   //view();   // 2
  30.   view1();
  31.   view2();     
  32. ?>

теперь о том что сносит мозг:
попробуйте раскоментить строку //2 будет ерор
если поменять местами строки //1 и //2 то ерор будет в другом месте
блин, в PHP функции эт как переменные где употребил там и появилась, ток переопределять нельзя.

ну а теперь суть вопроса: как можно обойти это дело, суть в том что мне нужна функция view1() из блока функции view(), если быть более точным, то мне не хочется засорять код повторяющимися функциями которые выполняют одно и тоже но находятся в разных блоках, так как в случае модификации необходимо модифицировать "оба" варианта, а хочется что бы только один.
 
 Top
Мелкий Супермодератор
Отправлено: 18 Ноября, 2010 - 23:53:03
Post Id



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


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


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




Мне кажется, с такими запросами вам пора в ООП идти.

А для процедурного программирования, представленная ситуация вообще является ошибкой проектирования.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function view1()
  3. {
  4.     global $autobold;
  5.     if ($autobold) echo "<b>1</b> <br>";
  6.           else echo "1 <br>";
  7. }
  8. function view2()
  9. {
  10.       global $autobold;
  11.       if ($autobold) echo "<b>2</b> <br>";
  12.           else echo "2 <br>";
  13. }
  14.   function view()
  15.   {
  16.     global $autobold;
  17.     $autobold = false;
  18.     view1();
  19.     view2();
  20.   }
  21.   function viewbold()
  22.   {
  23.     global $autobold;
  24.     $autobold = true;    
  25.     view1();
  26.     view2();
  27.   }    
  28.   viewbold();
  29.   //view();
  30.   view1();
  31.   view2();
  32. ?>


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 19 Ноября, 2010 - 00:05:30
Post Id



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


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


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




Мелкий пишет:
Мне кажется, с такими запросами вам пора в ООП идти.

верно сказано.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. class test
  4. {
  5.     var $bold = false;
  6.  
  7.     function view1()
  8.    {
  9.         if($this->bold) echo "<b>1</b> <br>";
  10.         else echo "1 <br>";
  11.    }
  12.     function view2()
  13.    {
  14.         if($this->bold) echo "<b>2</b> <br>";
  15.         else echo "3 <br>";
  16.    }
  17. }
  18. $test = new test;
  19.  
  20. $test->bold = true; // or false
  21. $test->view1();
  22. $test->view2();

эфект тот же

(Отредактировано автором: 19 Ноября, 2010 - 00:08:13)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DlTA
Отправлено: 19 Ноября, 2010 - 00:17:25
Post Id



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


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


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




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

Мелкий пишет:
Мне кажется, с такими запросами вам пора в ООП идти.
А для процедурного программирования, представленная ситуация вообще является ошибкой проектирования.
...

суть понятна. придется выносить (флаги вроде не критичны, можно опустить)
хотя с PHP серавно прозреваю))
(Добавление)
OrmaJever пишет:
var $bold = false;

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

мне в модуле нежно заюзать первую, и я искал метод не переписывая и не переструктурируя все, получить доступ к новой функции в первом блоке не вызывая сам первый блок
 
 Top
CenapaTop
Отправлено: 19 Ноября, 2010 - 13:09:06
Post Id



Частый гость


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


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




 
 Top
DlTA
Отправлено: 19 Ноября, 2010 - 13:17:21
Post Id



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


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


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




CenapaTop пишет:
function_exists()
но как можно применить в моем случае? ведь мне нужно не столько знать о существовании, сколько вызвать из нужного места.
 
 Top
JustUserR
Отправлено: 19 Ноября, 2010 - 19:13:00
Post Id



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


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


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




DlTA Осуществление разработки приложенй на языке PHP включает в себя возможность использования динамически определяемых и модифицируемых компонентов программы - такая схема обеспечивает явную реализацию для объектов первого рода таких как переменных простых и сложных пользовательских типов - определение которых связано исключительно с выбираемым пространством имен и контекстом исполнения Тем не менее в языках PHP до 5.3 версии включительно обеспивалось частичное представление функций как динамических объектов - в частности они не являются объектами первого рода однако могут быть реализованы в процессе исполнения программы - при обеспечении трактования программного кода в требуемом уровне трактования
В частности определение контекста хранене функций не языке PHP не обеспечивается - однако добавление их идентификаторов а общую таблицу имен производится исключительно передачи управления блоку программного кода - который включает ее определение


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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