PHP: можно предотвратить отображение функции на экране? - PullRequest
2 голосов
/ 30 декабря 2011

Хорошо, я знаю, что название немного сбивает с толку, так как я не могу придумать хороший способ объяснить это. Есть эта функция, к которой у меня нет доступа, и она выглядит примерно так:

<?php function myFunction() {
?> '<img src="one.jpg" />';
<?php } ?>

Хорошо, поэтому каждый раз, когда вызывается эта функция, она повторяет тег img. Но что, если я хочу манипулировать тегом img, прежде чем он отобразится на экране? Возможно ли это?

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

$image_src = myFunction();
$image_src = preg_replace('/s.*"/', $image_src);
echo $image_src;

Что-то подобное возможно?

Ответы [ 2 ]

11 голосов
/ 30 декабря 2011

Использовать буферизацию вывода :

ob_start();
myFunction();
$output = ob_get_clean();

, после этого $ output будет содержать html, который был отображен внутри функции.

1 голос
/ 30 декабря 2011

Я новичок в php, и первым делом я создал общую функцию для вывода строки в html:

function html_line ( $string ) // echo line to browser
{
  echo PHP_EOL . $string . PHP_EOL;
}

Затем я создал функции для простых абзацев и изображений, которые добавляют теги html, дляпример:

function html_pp ( $string ) // echo paragraph to browser
{
  html_line ( '<p>' . $string . '</p>' );
}

Другие функции и переменные могут использоваться для манипулирования содержимым любым удобным для вас способом, прежде чем они будут вызваны:

function html_page ( $str_title, $str_content ) // simple page with title and body
{
  html_line ( '<html>' );
  html_line ( '<head>' );
  html_line ( '<title>' . $str_title . '</title>' );
  html_line ( '</head>' );
  html_line ( '<body>' );
  html_pp ( $str_content );
  html_line ( '</body>' );
  html_line ( '</html>' );
}

function html_test () // set some variables and create a test page
{
  $test_title = 'PHP Test';
  $test_msg = 'Hello World!';
  html_page ( $test_title, $test_msg );
}

Я не знаю, отвечает ли это на ваш вопросно это работает хорошо для меня и может быть хорошей отправной точкой.Если вы решите отделить свои функции от другого файла, как я, просто убедитесь, что у вас есть правильные вызовы include, и функции будут иметь глобальную область видимости от вызывающей стороны.

...