在寫到評論的循環嵌套的時候遇到一個問題:
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,即我們因該先輸出不是回复的評論,在其末尾調用該回复輸出函數。
以上是php自訂函數如何引用外部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!