首頁  >  文章  >  後端開發  >  php自訂函數如何引用外部變數?

php自訂函數如何引用外部變數?

伊谢尔伦
伊谢尔伦原創
2017-06-26 10:53:423268瀏覽

在寫到評論的循環嵌套的時候遇到一個問題:
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(&#39;get_avatar&#39;)) { ?> <div class="gravatar_sub"><?php echo get_avatar($comment->comment_author_email,&#39;32&#39;); ?></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(&#39;<?php echo $comment->comment_ID; ?>&#39;,&#39;<?php echo $comment->comment_author; ?>&#39;)"><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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn