Лучше использовать ob_get_contents () или $text. = 'тест';

#include 

using namespace std;

int main(){
    int room_change=200;

    cout<<"Enter Blank";
    cin>>room_change;

    if(room_change==NULL){
       cout<<"There is NO-THING"<

Но гораздо более простой подход к этому будет использовать строки. Если это домашняя работа, и вы ограничены только целочисленной переменной. Это намного сложнее, если вы хотите определить, пуст ли буфер или нет. Независимо от ограничений домашней работы, ввод уровня ОС основан на строке. Как я могу использовать cin.get (), чтобы обнаружить пустой пользовательский ввод?

14
задан Darryl Hein 15 November 2008 в 03:24
поделиться

5 ответов

Буферы вывода имеют все ловушки глобальных переменных. Необходимо знать обо всех путях выполнения от ob_start() к ob_get_clean(). Вы уверены, что это доберется там, и что какие-либо буферы, открытые промежуточный, будут закрыты? Следует иметь в виду, что код может выдать исключения. Это может быть действительно забавной ошибкой для следующего парня, который разыщет.

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

6
ответ дан 1 December 2019 в 13:10
поделиться

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

кроме того, вместо того, чтобы выполнить обоих ob_get_contents () и ob_clean () просто выполняют ob_get_clean (), который выполняет обоих сразу.

6
ответ дан 1 December 2019 в 13:10
поделиться

Если Вы обеспокоены издержками конкатенации строк, необходимо быть примечанием что это:

эхо '< div> $test '. '</div>';;

в известной мере медленнее, чем это:

эхо '< div>'; $test, '</div>';;

первые компиляции вниз к два представляют в виде строки concats, сопровождаемый эхом, в то время как вторые компиляции вниз ко всего трем эху, который на самом деле более быстр.

4
ответ дан 1 December 2019 в 13:10
поделиться

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

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

ob_start();

foreach($items as $item) {
    echo '<div>';
    echo $item;
    echo '</div>';
}

$test = ob_get_clean();
2
ответ дан 1 December 2019 в 13:10
поделиться

Как упомянуто выше, произведите буферизацию, лучше для производительности. Для больших строк различие в производительности не является neglible вообще. Можно сравнить выходную буферизацию в PHP к StringBuffer/StringBuilder в Java; для конкатенации строк целая строка должна быть скопирована в памяти каждый раз. Для выходной буферизации текст входит в буфер, который растет в разумном incremements, и нет никакой потребности скопировать данные для каждого вывода.

Вы могли бы также думать об использовании встроенного HTML (еще быстрее). Дополнительное преимущество для встроенного HTML - то, что Ваш IDE может, вероятно, выполнить подсветку синтаксиса на HTML, которого не произойдет, когда HTML будет в строке PHP. Измененный код (short_open_tags = На необходимом):

ob_start();
?>

<? foreach($items as $item) { ?>
    <div><?= $item ?></div>
<? } ?>

<?
$test = ob_get_clean();
2
ответ дан 1 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: