吵吵   2011-07-08  阅读:13,856

在写到评论的循环嵌套的时候遇到一个问题:
Warning: Invalid argument supplied for foreach() in /home/yiliaoba/domains/chaochaoblog.com/public_html/wp-content/themes/chaochao/comments.php on line 49
好了,出现了一个invalid argument,即一个不可用的参数。

这个问题是怎么产生的呢,回去找找代码如下:
foreach ($comments as $comment) :

这下就看出来了,$comments 是函数外的变量,而我们就在函数中使用了。按照一般程序编写的思路,函数外的变量应该是可以看成全局变量的,如果是全局变量的话,那么在函数中调用是完全没有问题的。

看来php和我们传统的思路有点问题,那么php中全局变量是怎么的呢,我特意编写代码试试看。

1.在外部用global定义直接输出:
global $mytext;
$mytext=”nihao”;
function chao_echo(){
echo $mytext;
}
chao_echo();
结果:没有输出;

2.用GLOBALS数组输出:
global $mytext;
$mytext=”nihao”;
function chao_echo(){
echo $GLOBALS[‘mytext’];
}
chao_echo();
结果:输出正常

3.在函数内全局申明函数外的变量:
$mytext=”nihao”;
function chao_echo(){
global $mytext;
echo $mytext;
echo $GLOBALS[‘mytext’];
}

chao_echo();
结果:直接输出或者用GLOBALS全局数组输出都行。
4.将函数外部变量用参数传递进去:
$mytext=”nihao”;
function chao_echo($mytext){
echo $mytext;

}

chao_echo($mytext);
结果:可以输出。

总结一下,php中,函数内引用函数外的变量三种方法:

1.函数外global声明,函数内使用$_GLOBALS数组引用。

2.函数内global声明,函数内$_GLOBALS数组或者直接引用。

3.在调用函数的时候用一个参数传递。
那么,我们修改版的循环嵌套的函数如下

<?php 



function chao_comment_circle($chao_id,$comments){
	?>	
<?php foreach ($comments as $comment) :?>
<?php if($comment->comment_parent==$chao_id) :?>
    <!-- 子评论 b -->
    <div class="comment_one_sub">
    <?php if (function_exists('get_avatar')) { ?> <div class="gravatar_sub"><?php echo get_avatar($comment->comment_author_email,'32'); ?></div> <?php } ?>

    <div class="comment_frame_sub">
     <div class="comment_author_sub"><a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></div>
      <div class="comment_reply_sub" onclick="chao_reply('<?php echo $comment->comment_ID; ?>','<?php echo $comment->comment_author; ?>')"><a href="#respond">【回复】</a></div>
       <div class="comment_date_sub"><?php echo $comment->comment_date; ?>  <?php echo $comment->comment_time; ?></div> 
</div>

<div class="comment_text_sub"><?php echo $comment->comment_content; ?></div>

<?php chao_comment_circle($comment->comment_ID,$comments); ?>
</div>
<!-- 子评论 e -->
<?php endif ?>
<?php endforeach ?>
<?php	
}
?>

$chao_id是我们母评论的ID,即我们因该先输出不是回复的评论,在其末尾调用该回复输出函数。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

23条回应:“php中函数中引用函数外的变量”

  1. 我一直很崇拜会写PHP代码的人

  2. 地球博客说道:

    啊啊,看不懂。

  3. 混小子博客说道:

    看见这些东西头大了啊 呵呵

  4. 知蚁博客说道:

    不错,遇到个搞代码的博客了,握个爪先

  5. 教学时光说道:

    很专业的博客啊~

    • 吵吵说道:

      我这个还算不上专业吧,业余爱好者来着,随便弄弄的。

  6. 姜敏说道:

    原来是PHP高手呀,有空多请教一下才行

  7. 小俊说道:

    你就收我做徒弟吧···

  8. 赵盟说道:

    搞asp的路过,表示看不懂嘿嘿

    • 吵吵说道:

      好吧 现在来说搞asp的应该挺少了吧 都转移到.net中去了。

  9. huangz说道:

    博主太专业,值得我这个新手都不是的人学习

  10. 随心说道:

    看晕了……

  11. CO2说道:

    發現超哥的編寫風格是HTML和PHP分開的,我看的那本Larry Ullman的書上他是在PHP代碼里用echo輸出HTML代碼。這樣寫起來舒服多了,但是總是在調用PHP,會不會影響性能呢?

    • 吵吵说道:

      这个是做模板,那么模板当然是在html中夹入php代码了,但是如果是后台程序什么的最好是用echo来输出,因为更加灵活写,至于性能什么的,应该也不是什么太大问题吧。

      • CO2说道:

        明白了,很靈活,不過我還是想看看更多人的處理辦法,有木有好文介紹?

发表评论

电子邮件地址不会被公开。 必填项已用*标注