100分求助一道关于PHP里用函数调用反映逗号和点号的问题?

<?php
$arr = array(1=>'aaa', 2=>'bbb', 3=>'ccc');
$brr = array(1=>'ddd', 2=>'fff', 3=>'eee');

function doFun($value) {
echo $value;
}

echo '<table width=100% border=1>';
foreach ($arr as $key => $value) {
echo '<tr>';
echo '<td>'. doFun($value). '</td>';
echo '<td>'. $brr[$key]. '</td>';
echo '</tr>';
}
echo '</table>';

echo '<hr color="red">';

echo '<table width=100% border=1>';
foreach ($arr as $key => $value) {
echo '<tr>';
echo '<td>', doFun($value). '</td>';
echo '<td>'. $brr[$key]. '</td>';
echo '</tr>';
}
echo '</table>';
回答请不要网上随便复制粘贴一段
注意代码里的两句echo '<td>'. doFun($value). '</td>';和echo '<td>', doFun($value). '</td>';

我来尝试解释下这个问题:

首先,解决下表格输出的问题,修改代码如下,则两种方式输出的表格都很完整:

function doFun($value) {
return $value; //echo $value;
}

其次,解释下原因:

1. 逗号运算符版本

<?php
echo '<td>', doFun($value). '</td>';
?>

这段代码最终的执行效果,可以用以下代码表示:

<?php
echo '<td>';
//doFun($value)
{
echo $value;
}
echo '';
?>

2. 点号运算符版本
<?php
echo "outside func ()\n" . doFun($value);
?>

这段代码最终的执行效果,可以用以下代码表示:

<?php
//doFun($value)
{
echo $value;
}
echo "outside func ()\n" . '';
?>

3. 第一个<td> </td>.没有被解析的原因:

不是没有解析,而是计算输出顺序的问题:

echo '<td>'. doFun($value). '</td>';

这句代码,首先执行的是 doFun() 函数,那么会直接输出 $value的值(echo $value),然后将
doFun()函数的返回值代入echo,由于 doFun()函数 没有返回值,所以输出为 '<td></td>',也就是说上面的代码,其执行的代码效果如下:

//doFun($value)
{
echo $value;
}
echo '<td>'. (返回值:空). '</td>';
?>

=========================================
在php中,逗号运算符一般推荐在 echo 时使用,据称其输出字符效率比用 . 要高,需要注意的一点是两者有点小区别。追问

大哥,你的第三个要点里说道【由于 doFun()函数 没有返回值,所以输出为 ''】
但是最后我运行的时候,那张table表格第一列什么都没有完全空白,如果按你说的输出的话,不应该是空白啊!至少第一列里应该还有边框。

追答

有边框或是没有边框,这个跟浏览器对html代码的解析有关,有的浏览器(或是同个浏览器的不同版本),对于没有值的单元表格,显示的时候就是没有边框,这种情况,我以前遇到过。

你可以查看网页源代码,看有没有 这个代码,因为php输出的是html,所以不要光看显示效果,显示效果与具体的浏览器有关,我们现在关心的是php输出的结果,也就是网页的源代码。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-24
逗号表示语句的顺序执行,先执行echo '<td>',然后再执行echo $value;
点号表示字符串的链接,echo '<td>'. doFun($value). '</td>';中由于doFun($value)函数没有返回值,所以结果为空,即最后的结果为:<td> </td>.追问

回答的很好,把区别说出来了。但是,大哥,还是希望你能把我的代码运行一下。你会发现用点号连接起来的那个table表格输出的是 ------第一个 .没有被解析。第二个 .解析了
简言之你所说的最后一句是不正确的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网