Как записаить результат выполнения функции в переменную

Тема в разделе "PHP", создана пользователем SHAKAL, 14 апр 2011.

Модераторы: latteo
  1. SHAKAL

    SHAKAL Создатель

    Регистр.:
    30 мар 2007
    Сообщения:
    10
    Симпатии:
    3
    Здравствуйте, такой вопрос:
    Предположим есть функция:

    PHP:
    function test() {
    echo 
    'text';
    }
    К этой функции у меня доступа нет, т.е вносить в неё изменения/редактировать её (заменить echo на return) я не могу, как я могу записать результат выполнения данной функции в переменную? Т.е если бы она отдавала текст через return я бы написал так:

    PHP:
    function test2 () {
    $out 'bla-bla';
    $out .= test();
    return 
    $out;
    }

    но она выводит результат сразу через echo...
    Как быть?
     
  2. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    PHP:
    function test2 () { 
      
    $out 'bla-bla'
      
    ob_start();
    // ob_implicit_flush(0); только если есть проблемы или будет Gzip
        
    test(); 
        
    $out .= ob_get_contents();
      
    ob_end_clean();
    return 
    $out
    }
     
    STsoldier и SHAKAL нравится это.
  3. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    можно и так :)
    PHP:
    function test2()
    {
        
    $out 'yourstring';
        
    ob_start(); 
        
    $out .= ob_get_clean();
        return 
    $out;
    }
     
  4. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    Miraage
    буффер остается включеным, может вызвать ошибку, при повторном обращении или если будет *flush
    если будет ошибка или лишние данные концов потом ненайти.
    надо делать ob_end_clean() это и очистит и выключит буфферизацию
     
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129

    string ob_get_clean (void)
    Функция вернёт содержимое буфера и закончит буферизацию. Если буфер не активизирован, функция вернёт FALSE. Функция ob_get_clean() по существу выполняет и ob_get_contents() и ob_end_clean(). Учи матчасть :)
     
  6. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    если бы на практике не столкнулся с багами) то я б не писал об этом.
    по существу оно должно так делать да не всегда делает.
     
  7. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    пример в студию
     
  8. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    поработай с буффером, сначала, потом попробуй всеэто в Gzip, и выдать, да с Гзип нужно делать еще ob_implicit_flush(0)
    или сначала с буфером, и потом в другом классе, фукнции тоже но уже используюя flush.
    бажные примеры придумывать боюсь не выйдет. уже голова так не умеет