Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP HTML生成-使用字符串连接_Php_Performance_String Concatenation - Fatal编程技术网

PHP HTML生成-使用字符串连接

PHP HTML生成-使用字符串连接,php,performance,string-concatenation,Php,Performance,String Concatenation,关于从PHP输出html的不同方法的问题;以下各项之间的性能差异是什么: 方法1-变量串联 $html = ''; $html .= '<ul>'; for ($k = 1; $k < = 1000; $k++){ $html .= '<li> This is list item #'.$k.'</li>'; } $html .= '</ul>'; echo $html; $html=''; $html.=''; 对于($k=1;$

关于从PHP输出html的不同方法的问题;以下各项之间的性能差异是什么:

方法1-变量串联

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;
$html='';
$html.='
    '; 对于($k=1;$k<=1000;$k++){ $html.='
  • 这是列表项#。$k.
  • ; } $html.='
'; echo$html;
方法2-输出缓冲

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';
ob_start();
回声“
    ”; 对于($k=1;$k<=1000;$k++){ 回显“
  • 这是列表项,$k”
  • ; } 回声“
”;
我怀疑不断修改和扩大变量会对性能造成影响;对吗

干杯

谢谢GaryF,但我不想得到关于体系结构的答案——这个问题是关于性能的。对于哪一个更快,似乎有一些不同的观点/测试,这就是为什么目前还没有一个公认的答案。

我通常使用方法1,这样我就可以将HTML放在包含静态HTML的模板文件中的任何位置。我试图在PHP中保留尽可能多的HMTL。由于模板通常是一个单独的文件,因此它使PHP更加简洁

关于速度/性能,我认为差别很小。通过输出缓冲,它也一直在放大一个变量,尽管该变量不可访问,但它必须存储在某个地方


我经常想知道打开和关闭
在不断修改变量并重新打印它时是否会有轻微的开销。但是,不这样做意味着脚本可能会在某个时候完成运行(由于中断或类似情况),并且顺序echo语句将部分打印页面,而不是什么也没有打印。

我将键入一个关于PHP字符串如何可变(与C或C#等不可变字符串相反)的长回复,但我想我会链接到。我基本上是针对使用stringbuilder的Java和C#解决方案来处理您的问题

旁注:stringbuilder解决方案类似于(未经测试):

$html=array();
$html[]='
    '; 对于($k=1;$k<=1000;$k++){ $html[]='
  • 这是列表项#'; $html[]=$k; $html[]='
  • '; } $html[]='
'; 回声内爆(“”,$html);
有几点想法:

  • 输出缓冲会使页面看起来很慢,因为在整个脚本运行之前,用户什么也看不到(尽管您的设置方式也一样)

  • php中的字符串是可静音的,所以连接并不像其他一些语言那样糟糕。也就是说,输出缓冲可能会稍微快一点,因为默认情况下为输入分配的空间相当大(根据


最后我要说的是,这实际上更多的是一个风格问题。如果您喜欢输出缓冲为您带来的好处,那么这可能是一条可行之路

您的问题的答案也可以在这里找到:

字符串连接是构建字符串的最快方法


我还没有测试过“echo”和字符串构建,但只要不使用缓冲输出,echo应该是最快的,因为它是对自刷新缓冲区的顺序写入。(只有在齐平时才会减速,即使你事先做了字符串连接,你也不会真正避免)

撇开字符串连接本身不谈,你真的在问(我认为)你应该如何构建网页,我觉得任何形式的显式连接都可能是错误的

尝试使用来构建您的数据,并将其传递到一个简单的模板库(如),让它考虑如何构建您的视图


更好的分离,更少的顾虑。

我没有提到的是,通常情况下,PHP人员必须与需要对HTML进行分类或以其他方式添加样式的设计人员合作,因此解决方案必须记住这一点。

这有点老了,但Sara Golemon可能会有所帮助。好的,输出缓冲功能非常快速有效,
echo
,这就是我要使用的

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);