Может я чёто не понимаю, но функция : Код (Text): function get_hook($hook_id) { global $forum_hooks; return !defined('FORUM_DISABLE_HOOKS') && isset($forum_hooks[$hook_id]) ? implode("\n", $forum_hooks[$hook_id]) : false; } должна всё время возвращать false тк $forum_hooks не является массивом, а $hook_id его элементом. Я пытаюсь разобраться в движке форума PunBB, который уж наверно написан без ошибок(тем более таких очевидных). Поэтому собственно прошу помощи. Ещё на протяжении всего кода постоянно встречаются такие вот строки Код (Text): //Такие ($hook = get_hook('in_start')) ? eval($hook) : null; //Такие ($hook = get_hook('in_qr_get_new_topics')) ? eval($hook) : null; //И такие ($hook = get_hook('in_pre_header_load')) ? eval($hook) : null; Которые при $hook = false непонятно чему присваивают значение null Кто может помогите разобраться.
есть ли константа форум_отключить_хуки? скорее всего нет. на этом уже возвращаем фолс. допустим есть такая константа. тогда проверяется второе - есть ли хук_ид среди хуков. собственно если форум_хукс не массив или массив но в нем нет ключа хук_ид - изсет вернет фолс. значит опять функция вернет фолс. это логика функции. далее про странные конструкции. сие значит слева направо: если $хук после выполнения функции гет_хук(имя_хука) имеет не ложное значение - выполнить тот код который в переменной $хук. эвал это выполнение строки текста как кода. далее. двоеточие нул - сюда код придет если $хук в значении фолс после вызова гет_хук. это просто нул. он ничего не делает. иными словами там что-то типа Код (Text): $hook = get_hook('some_hook'); if($hook){ eval($hook); } только одной строкой.
если ты не менял код, то он верный — он же работает с кучей всякой фигни на punbb! почему МЫ должны проверять это? сомневаешся — отлаживай! см. phpfaq.ru/debug/ Добавлено спустя 7 минут 8 секунд: ну ёпта! да, в большинстве случаев хук отсутствует и ничего не происходит. если же конкретный хук задан. то будет выполнена некая команда. здесь тернарный оператор это тупо чуть более краткая форма if-else. просто хак. можно было бы еще так сделать: Код (PHP): ($hook = get_hook('in_start')) and eval($hook); аналогично — если $hook не false, то выполнить его. это perl style )))