За последние 24 часа нас посетили 39128 программистов и 1278 роботов. Сейчас ищут 1019 программистов ...

Вроде про хуки

Тема в разделе "PHP для новичков", создана пользователем machetero, 3 ноя 2014.

  1. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Может я чёто не понимаю, но функция :
    Код (Text):
    1. function get_hook($hook_id)
    2. {
    3.     global $forum_hooks;
    4.  
    5.     return !defined('FORUM_DISABLE_HOOKS') && isset($forum_hooks[$hook_id]) ? implode("\n", $forum_hooks[$hook_id]) : false;
    6. }
    должна всё время возвращать false тк $forum_hooks не является массивом, а $hook_id его элементом.
    Я пытаюсь разобраться в движке форума PunBB, который уж наверно написан без ошибок(тем более таких очевидных). Поэтому собственно прошу помощи.

    Ещё на протяжении всего кода постоянно встречаются такие вот строки
    Код (Text):
    1. //Такие
    2. ($hook = get_hook('in_start')) ? eval($hook) : null;
    3. //Такие
    4. ($hook = get_hook('in_qr_get_new_topics')) ? eval($hook) : null;
    5. //И такие
    6. ($hook = get_hook('in_pre_header_load')) ? eval($hook) : null;
    Которые при $hook = false непонятно чему присваивают значение null

    Кто может помогите разобраться.
     
  2. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Так в чем вопрос?
     
  3. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Это ошибки или код верный ? Всмысле я всё правильно понимаю ?
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    есть ли константа форум_отключить_хуки? скорее всего нет. на этом уже возвращаем фолс.
    допустим есть такая константа. тогда проверяется второе - есть ли хук_ид среди хуков. собственно если форум_хукс не массив или массив но в нем нет ключа хук_ид - изсет вернет фолс. значит опять функция вернет фолс.

    это логика функции.

    далее про странные конструкции. сие значит слева направо: если $хук после выполнения функции гет_хук(имя_хука) имеет не ложное значение - выполнить тот код который в переменной $хук. эвал это выполнение строки текста как кода. далее. двоеточие нул - сюда код придет если $хук в значении фолс после вызова гет_хук. это просто нул. он ничего не делает.

    иными словами там что-то типа
    Код (Text):
    1. $hook = get_hook('some_hook');
    2. if($hook){
    3.   eval($hook);
    4. }
    только одной строкой.
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    если ты не менял код, то он верный — он же работает с кучей всякой фигни на punbb! почему МЫ должны проверять это?

    сомневаешся — отлаживай! см. phpfaq.ru/debug/


    Добавлено спустя 7 минут 8 секунд:
    ну ёпта! да, в большинстве случаев хук отсутствует и ничего не происходит. если же конкретный хук задан. то будет выполнена некая команда. здесь тернарный оператор это тупо чуть более краткая форма if-else. просто хак.
    можно было бы еще так сделать:
    Код (PHP):
    1. ($hook = get_hook('in_start')) and eval($hook); 
    аналогично — если $hook не false, то выполнить его. это perl style )))
     
  6. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Вскем спасибо. Щас более менее понятно стало.
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    кому это "всем" :) здесь кто-то есть? :D
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Официант, текилы тому чуваку в сомбреро )
     
  9. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Ну тебе например )