За последние 24 часа нас посетили 18115 программистов и 1650 роботов. Сейчас ищут 1543 программиста ...

Надстройка над include

Тема в разделе "Решения, алгоритмы", создана пользователем Apple, 23 мар 2010.

  1. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    От нех делать набросал функцию, столь популярную среди новичков.
    Из-за своей неопытности они очень часто спрашивают об этом, а буквально сегодня встретился ещё один перл.
    Ну, в связи с этим решил вот написать функцию, которая расширяет функционал, предоставляемый include.

    Идею можно развить, но мне кажется, что такого функционала хватит выше крыши.
    Сначала примеры:

    PHP:
    1. <?php
    2.  
    3. // Обычная загрузка множества файлов
    4. __include("main.php", "incl.php", "third.php", "somefile.php");
    5.  
    6. // Передача в качестве аргумента массива
    7. __include(array("first.php", "second.php"));
    8.  
    9. // Самое главное - загрузка файлов с параметрами
    10. __include("main.php?mod=main");
    11.  
    12. // Загрузка множества файлов с параметрами
    13. __include("main.php?mod=main", "template.php?name=file&id=2");
    14.  
    15. ?>
    Впечатляет?
    Конечно же нет =))

    А теперь, собственно, код:

    PHP:
    1. <?php
    2.  
    3. // Copyright (c) Arthur Andersen
    4.  
    5. function __include() {
    6.     static $incl = array();
    7.    
    8.     if(func_num_args()) {
    9.         if((func_num_args() == 1) && (is_array(func_get_arg(0)))) {
    10.             $argv = func_get_arg(0);
    11.         } else $argv = func_get_args();
    12.        
    13.         for($i = 0; $i < sizeof($argv); $i++) {
    14.             // DUMP
    15.             $incl[] = $argv[$i];
    16.            
    17.             if(($pos = strpos($argv[$i], '?')) !== false) {
    18.                 parse_str(substr($argv[$i], ($pos+1), strlen($argv[$i]) - $pos), $_GET);
    19.             } else $pos = strlen($argv[$i]);
    20.            
    21.             include substr($argv[$i], 0, $pos);
    22.         }
    23.     } else return $incl;
    24. };
    25.  
    26. ?>
    Юзайте на здоровье =)

    Кстати, в случае некорректной работы предназначен отладочный режим.
    Для этого функция записывает все имена проинклюживаемых файлов при каждом своём вызове.
    Для того, чтобы увидеть все загруженные файлы, следует вызвать функцию без параметров.
    Она вернет массив, который можно передать в "var_dump" или "print_r" для более подробной информации.
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    где-нить в php3/4

    об автолоаде детишкам не рассказывали? =)
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Опять мистер-мит тыкнул пальцем в небо ... ну или во что-то теплое =)
    Увы, МИТ, твой комментарий абсолютно не касается темы)
    autoload не для этого делали, и передачу параметров он, увы, тоже не реализовывает.

    Или может все новички с ООП начинают))
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вообще-то там оно результат уже отработанных скриптов возвращает, а не просто инклюдит файлы ;)

    может при
    PHP:
    1. <?php echo file_get_contents('http://site.ru/cms2/block.php?g=menu'); ?>
    ещё и кэширование какое прикручено. А что?
    И аккуратней с двойным подчёркиванием

    а ещё про include_path, auto_prepend_file, auto_append_file
     
  5. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Luge, не пишите больше ничего - у Вас 3500 постов, красивое число ;)

    4all, какой ерундой приходится заниматься... =(
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ггг, что не сделай - всегда говном обольют)))
    Веселые ребята)
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    4000 будет ещё лучше. А потом уломать 440hz вернуть подписи и исполнить мечту ГО и продавать ссылки в подписях :D
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ты чего?
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Видимо про мечту :)
     
  10. Вот если бы он написал - "потому что хочу, прикольно и ниибет" - то было бы ладно.
    Если бы написал, почему так делать не нужно, вредно, и глупо - это было бы прекрасно.
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    наверно новички не знают что инклуд возвращает резалт скрипта и тычит варнинг с фолсе если при ошибке..
     
  12. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    смотря к чему как относится )))
    Петр
    а у вас маловато сообщений, странно как то...
     
  13. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну-с, порой гораздо легче сделать именно так, чем объяснить, почему именно так делать не стоит =)
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Apple
    ничего я не ткнул. просто я немного расширил образ дейтсвия сабжа.
    флоппик
    +100
     
  15. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Спасибо