在写到评论的循环嵌套的时候遇到一个问题: 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 -->
    <p class="comment_one_sub">
    <?php if (function_exists('get_avatar')) { ?> <p class="gravatar_sub"><?php echo get_avatar($comment->comment_author_email,'32'); ?></p> <?php } ?>
    <p class="comment_frame_sub">
     <p class="comment_author_sub"><a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></p>
      <p class="comment_reply_sub" onclick="chao_reply('<?php echo $comment->comment_ID; ?>','<?php echo $comment->comment_author; ?>')"><a href="#respond">【回复】</a></p>
       <p class="comment_date_sub"><?php echo $comment->comment_date; ?>  <?php echo $comment->comment_time; ?></p>
</p>
<p class="comment_text_sub"><?php echo $comment->comment_content; ?></p>
<?php chao_comment_circle($comment->comment_ID,$comments); ?>
</p>
<!-- 子评论 e -->
<?php endif ?>
<?php endforeach ?>
<?php
}
?>$chao_id是我们母评论的ID,即我们因该先输出不是回复的评论,在其末尾调用该回复输出函数。  |