как превратить вывод оператора require в строку в php - PullRequest
1 голос
/ 15 июля 2011

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

Поскольку я пишу не страницу ht; ml, а функцию, генерирующую этот код, мне нужно превратить полученный HTML-код оператора require в строку, чтобы объединить его с кодом, сгенерированным моей функцией.

Есть ли способ оценить require и связать его результат с моими строками?

Я попробовал функцию eval (), но она не работала, и прочитал кое-что о get_the_content (), но она тоже не работает. Я не знаю, нужно ли мне что-то импортировать, я думаю, что это как-то связано с WordPress, и я использую raw php.

спасибо за вашу помощь !!! =)

Ответы [ 3 ]

10 голосов
/ 15 июля 2011

Попробуйте семейство функций ob _... ().Например:

<?php

    function f(){
        echo 'foo';
    }
    //start buffering output. now output will be sent to an internal buffer instead of to the browser.    
    ob_start();

    //call a function that echos some stuff
    f();

    //save the current buffer contents to a variable
    $foo = ob_get_clean();

    echo 'bar';
    echo $foo;

    //result: barfoo

?>

Если вы хотите поместить результат эха включения в переменную, вы можете сделать что-то вроде этого:

//untested
function get_include($file){
    ob_start();
    include($file);
    return ob_get_clean();
}

или если вы хотитепоместите результат echo'd вызова функции в переменную, вы можете сделать что-то вроде этого:

//untested
//signature: get_from_function(callback $function, [mixed $param1, [mixed $param2, ... ]])
function get_from_function($function){
    $args = func_get_args();
    shift($args);
    ob_start();
    call_user_func_array($function,$args);
    return ob_get_clean();
}
2 голосов
/ 15 июля 2011

В зависимости от того, как работает другой файл ...

  1. Если другой файл можно изменить на , вернуть значение , тогда вы должны использовать:

    $content = require 'otherfile';
    
  2. Если другой файл просто использует echo или другой способ печати напрямую, используйте:

    ob_start();
    require 'otherfile';
    $content = ob_get_clean();
    
0 голосов
/ 15 июля 2011

Вы можете получить строку с include или require, но вы должны обновить эти файлы перед включением, чтобы добавить инструкцию return.

файл, который будет включен, должен возвращать результат, подобный этому

<?php

$var = 'PHP';

return $var;

?>

и вы можете получить данные $ var, включив этот файл

$foo = include 'file.php';
echo $foo; // will print PHP

Раздел документации

...