За последние 24 часа нас посетил 22301 программист и 1062 робота. Сейчас ищут 613 программистов ...

Отличие require и require_once

Тема в разделе "PHP для новичков", создана пользователем jurvrn.ru, 11 июл 2019.

Статус темы:
Закрыта.
  1. twim32

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

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Объявление функции: создание новой функции. Например:
    Код (Text):
    1. function myfunction($argument) {
    2.      // какие-то действия
    3.      return $result;
    4. }
    PHP будет ругаться если этот фрагмент попадет 2 раза на одну страницу. Так как 2х функций с одинаковым именем быть не может.

    Тут правильного ответа нет на самом деле, и то и другое приемлемо: с одной стороны виджет вызывается только в одном месте, поэтому можно include_once. Но если вдруг нужно будет разместить его где-нибудь еще на странице, то include. Я бы сделал сразу через include, чтобы не морочить потом голову и не вспоминать почему второй раз не подключается.
     
    jurvrn.ru нравится это.
  2. acso

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

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Дружище, используй _once. Тогда забудешь о головных болях. И о необходимости немного думать, где уже включил или "занеобходимил" или еще только подумал это сделать. Да и программирование ли это, когда не помнишь свой код?
    ПыСы: на прессе делаю визитки, иногда что-то посерьезней.
    Более серьезные проекты пишу с index.php
     
    jurvrn.ru нравится это.
  3. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    про include уже решил что не подходит вроде, про once понял, но функция объявления/создания виджета хоть и одна, но я этих виджетов могу хоть 10 в разных местах страницы в специально созданных под них зонах разместить и причем один и тот же...

    в принципе в дополнительном файле например такое

    PHP:
    1. /*---------Отключение стандартных виджетов -------------*/
    2.  
    3. add_action('widgets_init', 'unregister_basic_widgets' );
    4.  
    5. function unregister_basic_widgets() {
    6.  
    7. unregister_widget('WP_Widget_Pages'); // Виджет страниц
    8.  
    9. unregister_widget('WP_Widget_Calendar'); // Календарь
    10.  
    11. unregister_widget('WP_Widget_Archives'); // Архивы
    12.  
    13. unregister_widget('WP_Widget_Tag_Cloud'); // Облако меток
    14.  
    15. }
    ок )

    многие программисты с wordpress меня ругают за некрасивую тему, но я её код уже знаю , подэтому отказаться уже не смогу, придется допиливать.
    Да и сайт планируется чисто информационный. Там красивости не нужны.

    PS вопрос возник потому, что разработчики темы сами используют и с once и без once присоединение файлов php.
    Тема закрыта, Всем говорю спасибо, пока с once все работает без ошибок.
     
    twim32 нравится это.
  4. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    include_once используй, если не ошибаюсь останавливает работу скрипта если че-то пошло не так
     
  5. acso

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

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Ошибаетесь. Почитайте выдержку из мануала на английском на первой странице обсуждения. Будет выдано предупреждение и скрипт продолжит работу дальше.
     
    jurvrn.ru нравится это.
  6. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    @acso, а include даже не выдаст предупреждения? тогда once мне больше нравится
     
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @jurvrn.ru, при всём моём уважении к юристам... нельзя быть таким тупым.
    Тема на две страницы, хотя достаточно одного поста, а то и вообще можно было обратиться по средствам гугла в мануал и не засорять форум.
     
    acso нравится это.
  8. acso

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

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    :(
    Берем листик формата А4 (или лучше А1, чтобы на стену повесить). Рисуем таблицу: заголовки столбцов "require", "include". Заголовки строк "с _once", "без _once". Читаем мануал и записываем особенности использования в ячейки таблицы. Запоминаем на всю оставшуюся жизнь и больше не задаём глупые вопросы))
    --- Добавлено ---
    Только что жене (она медработник) на пальцах объяснил принцип 4-х вариантов - говорит, что поняла :D
     
  9. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    Из уважения к вашей помощи сочту ваше обращение за ваше искренне желание добится понимания от меня) Но давно всё понял, про include просто опечатался. имел ввиду require.
    что ж тут непонятного, уже разъяснили, возможно я просто не правильно выражаюсь и поддерживаю общение -
    да и главное что мне пытаются объяснить теорию, а на практике моего случая никто не отвечает - я подключаю к основному function.php файл function2.php, в котором отключаются стандартные виджеты и который создает новые виджеты.
    поэтому это не мой пример. У меня не стили и не код html....
    Мой вариант require. Ну а логически чисто получается что мне не нужно постоянно создавать эти виджеты, нет вычисляемых переменных и т.п. достаточно один раз создать при запуске сайта, то есть once.
    Просто ещё сбило что сам разработчик сайта использует
    1. require get_template_directory() . '/admin/template-tags.php';
    2. require_once get_template_directory() . '/admin/custom.php';
    template-tags.php - это уже созданные функции, а custom.php - подключение функции, которая подключает стили пользователя (не сами стили, а функцию их подключения).
    Поэтому и вопрос - почему и так, и так....
     
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @jurvrn.ru, да неважно что ты подключаешь, _once это защита от повторного подключения файла на уровне php.
    Никто не будет разбираться с твоим виджетом, что там у него под капотом. Просто используя функцию с _once , ты этот виджет сможешь подключить только один раз на странице.
    Дальше больше, я понятия не имею что это за такой виджет без которого не способен работать функционал сайта, лично для меня это дико.
     
    #35 Valick, 15 июл 2019
    Последнее редактирование: 15 июл 2019
  11. jurvrn.ru

    jurvrn.ru Новичок

    С нами с:
    14 июн 2019
    Сообщения:
    97
    Симпатии:
    2
    это понятно из названия, просто мне то надо один раз или...?
    у wordpress можно подключить созданный виджет хоть сто раз в любой созданной зоне виджетов, на странице их может быть сколько угодно этих зон...
    без виджета все работает кроме этого виджета.
    Я уже писал что у меня с once нет ошибок, но разработчики используют и без once часть подключений... Понятно что надо проанализировать содержание файлов или их задумку, но не это проблема данной беседы.
    Пора закрывать тему.
     
  12. ElisDN

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

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Wordpress всё равно подключает functions.php темы только один раз. Так что ему без разницы, используете вы там _once или нет.

    Пишите везде строгие require или require_once вместо нестрогого include и не мучайтесь.
     
    jurvrn.ru нравится это.
  13. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Использование require(_once) или include(_once) обусловлено данными которые они выдают, а именно :
    require если выполняется то выдаст 1 TRUE, иначе код остановится.
    include если выполняется то выдаст 1 TRUE, иначе выдаст 0 FALSE.
    + include может содержать в теле выражение return для получения данных
    из этого следует:
    require рекомендуется использовать если известно что файл статический и не будет изменять свое название.
    include рекомендуется использовать если файлы динамические, можно использовать в выражениях для получения данных из файла и языковых конструкциях.
    То есть просто подключить файл require.
    Какие то логические операции с файлом, получение данных из файла include.
     
    jurvrn.ru нравится это.
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Павел Голубцов, в require также можно возвращать значения. И по поводу динамического формирования имен вы тоже не совсем точно написали.
     
    jurvrn.ru нравится это.
  15. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Это краткая инструкция что такое require и include в чем их принципиальное, задуманное различие.
    Две страницы постов а сути я не уловил в них, вода водяная, поэтому написал.
    Возвращаемые значения есть require не возможно построить полнофункциональную логику.
    Пере прочитал, не увидел что я писал про какие то динамические построения имен, есть вышеописанная заложенность использования логики (тут можно коснутся еще на 3 листа), я понимаю люди устают, тупят, но это же php.ru или базар.
    P. S. Это краткое руководство достаточное для использования вышеупомянутых выражений, новичок сделает не ошибется а "бывалый" задумается все ли он знает об этих выражениях.
    Не уверен что есть в инете такое простое описание что делают эти выражения, может сейчас уже и появилось.
    И да, можно подключить после этот же файл, если использовать сперва (_once) и мы думаем что все уже второго не будет.
     
    jurvrn.ru нравится это.
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    miketomlin и acso нравится это.
  17. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Возможно. Хотя ХЗ, что вы подразумеваете под «полнофункциональной логикой».

    Если речь о статическом файле в обычном понимании этого словосочетания, то тут вообще readfile нужно использовать. Запускать на выполнение статик файл – идиотизм.
     
  18. acso

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

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    @mkramer Вы таки правы. Нужно сворачивать тему. А всему виной я: речь шла про require, а я со своим include'ом.
    Пысы: меня в универе в далёких 90-ых учили: настоящий инженер не тот, кто всё знает, а тот, кто может поднять мануал и найти решение своей проблемы.
    А так разговор ни о чем на две страницы.
     
Статус темы:
Закрыта.