2013-09-20 3 views
0

У меня есть замыкание внутри функции, но когда оно называется возвращаемым значением, это не то место, где я ожидал, что это будет.Закрытие ведет себя неожиданно

public function test($name, $content) 
{ 
    $test = "\t<div id=\"{$name}\">{$content()}</div>\n"; 
    return $test; 
} 

Вместо возвращения этого ...

<div id="name">content</div> 

Вместо этого он возвращается ...

content 
<div id="name"></div> 

Если у вас есть какие-либо идеи, как это исправить, чтобы отобразить правильно, то я бы очень счастливый человек, спасибо заранее.

ответ

-1

Позвольте закрытию выполнить и поймать, что было возвращено. Затем вставьте результат:

public function test($name, $content) 
{ 
    $insert = $content(); 
    $test = "\t<div id=\"{$name}\">{$insert}</div>\n"; 
    return $test; 
} 
+0

Это тоже не работает, тот же результат. –

+0

Если '$ content()' будет возвращать печатаемый контент, исходный код будет работать так же хорошо. – JJJ

+0

Проблема заключалась в том, что я возвращался обратно, вместо того, чтобы возвращать его функции, которая вызвала неожиданный результат, спасибо за вашу помощь! –

2

Вы не показали функцию $content(), но от симптомов я предполагаю, что это отпечатки содержание вместо того, чтобы вернуться. Случается, что функция test() вызывает функцию $content(), которая отображает содержимое и ничего не возвращает, затем возвращается test() и что-то еще печатает возвращаемое значение.

Чтобы исправить это, просто введите $content(), верните содержимое, а не печатайте его.

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