2013-12-15 2 views
0

Я уже пытался Google, как это сделать, но я все еще не могу понять это. Как создать простой хост внутри PHP? Вот то, что я пытался до сих пор:PHP Как создать простой крючок?

wrapper.php (приложение начинается здесь)

<?php require 'core.php'; ?> 
<?php require 'view.php'; ?> 

core.php

<?php 

$hooks['hook_head'] = array(); 

//supposed to insert action in $hooks 
function addHook($hookName, $funct){ 
    global $hooks; 
    array_push($hooks[$hookName], $funct); 
} 


//supposed to execute specific hook 
function executeHook($hookname){ 
    global $hooks; 
    foreach($hooks[$hookname] as $funct){ 
     call_user_func($funct); 
    } 
} 

//supposed to execute action in $hooks when array key = hook_head 
function hook_head(){ 
    global $hooks; 
    if (array_key_exists('hook_head', $hooks)) { 
     executeHook('hook_head'); 
    } 
} 

//supposed to execute action in $hooks when array key == hook_footer 
function hook_footer(){ 
    global $hooks; 
    if (array_key_exists('hook_footer', $hooks)) { 
     executeHook('hook_footer'); 
    } 
} 

?> 

view.php

<!DOCTYPE HTML> 
<html> 
<head> 
    <?php hook_head(); ?> 
</head> 
<body> 
    <hr /> 

    <?php 
     //add action to hook start here 
     $test = function(){ echo "test succeds"; }; 
     addHook('hook_head', $test); 
    ?> 

    <?php hook_footer(); ?> 
</body> 
</html> 

Код работает нормально, если я вставляю действие внутри $hooks['hook_head'], прежде чем позвонить hook_head(). То, что я на самом деле пытаюсь сделать, это вставить действие после того, как я вызвал hook_head(). Как мне это сделать?

+1

Не уверен, что вы знаете, что крючок. – FaddishWorm

+0

Вы хотите иметь несколько функций для каждого права «hookname»? – robbmj

+0

@FaddishWorm Хорошо, я начинаю сомневаться, что знаю о крючке. Я просто хочу что-то повторить в заголовке тега из тега body. – ilike

ответ

2

Переведите вызов addHook перед вызовом hook_head (желательно в начало файла).

Я заметил, что вы «хотите начать кодирование (вставить действие в голову крюка) после вызова hook_head()», но это очень громоздко. Это выглядело бы так:

  • Изменить hook_head(), чтобы вставить какой-то токен в выходной сигнал.
  • В конце сценария
    1. позвонить ob_get_clean(), чтобы получить выходной буфер страницы.
    2. Для каждого крючка:
      1. Выполнение крюка.
      2. Вызвать ob_get_clean() еще раз, чтобы получить выходной буфер крючка.
      3. Замените соответствующий токен в буфере oputput страницы с выходным буфером крючка.
    3. Печать выходного буфера страницы.

Как я уже сказал: громоздким. Я категорически против этого. Я только упомянул об этом, потому что вы спросили конкретно. Это противоречит интуитивному потоку управления

  1. входа
  2. Обработка
  3. Выход
+0

Я тоже думаю об этом, что его невозможно, могу ли я что-то сделать, возможно, изменить все в core.php или сделать что-нибудь, чтобы это стало возможным? – ilike

+0

Ну, это действительно возможно, но я действительно не хочу об этом говорить. – Oswald

+0

благодарю вас за мудрого сэра – ilike

Смежные вопросы