更具体地说,可以代码块
ob_start();
echo $astring;
$astring = ob_get_clean();
更改$ astring的值?换句话说,我想知道echo,输出缓冲和获取缓冲区的组合是多么可靠。当然,我已经测试过了。使用简单的字符串,在我的测试中,字符串保持不变。我想知道我是否可以依靠这种情况。有没有可能的例外?可能有所不同的是字符串中特殊转义字符的出现,类似的事情。
答案 0 :(得分:0)
更新:此答案实际上并未解决OP的问题。我们在聊天中继续讨论(参见有关问题的评论),看来OP对我给出的解释感到满意,并澄清了他们的困惑。
正如我在评论中所承诺的那样,这是一段会使您的代码失败的代码。它是为这次讨论人为创造的。
但是,当你处理一个大项目时,错误处理程序可以安装在深度包含的文件中(或由框架),unset($astring);
的效果可以通过拼写错误或只是忘记来实现将值存储到变量中,最终结果出乎意料。
// Install an error handler that will output the error messages it gets
set_error_handler(
function($errno, $errstr) {
echo('The error #'.$errno.' happened. The message is: '.$errstr);
return FALSE;
},
E_NOTICE
);
// Ensure the notices won't show to the surface (they will pollute the
// script's output on screen only, they do not change the output buffer)
// You can use error_reporting(0) as well, it still works as expected.
error_reporting(E_ALL & ~E_NOTICE);
// Force PHP trigger an E_NOTICE
// the error handler installed above will kick in and mess the output
unset($astring);
// The innocent block of code
ob_start();
echo $astring;
$astring = ob_get_clean();
// Check the results
echo("================\n");
echo('The content of variable $astring is: [[['.$astring."]]]\n");
答案 1 :(得分:0)
null
技术上不是字符串,而是
<?php
$x=null;
ob_start();
echo $x;
$y=ob_get_clean();
var_dump($x); //NULL
var_dump($y); //string(0) ""
大致是将null
强制转换为字符串。与其他非字符串类型类似的结果
答案 2 :(得分:0)
这是由axiac做出的评论的粘贴和剪切:输出缓冲区只不过是一个隐藏的字符串变量。它与任何其他字符串变量一样可靠,可以容纳任何数量的文本,受memory_limit php.ini配置的限制(减去脚本创建的其他数据和内存管理的内部PHP结构)以及计算机上可用的内存量(由于分页,这几乎是无限的。