成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 一步一步學習PHP(4) php 函數 補充2
全站頭部文字 我要出現在這里
一步一步學習PHP(4) php 函數 補充2 754 2023-12-09   

1. 解決作用域問題

在上一節談到了PHP中函數的作用域問題,如果說類還不夠說明問題,那么在這篇文章中的作用域例子,也許對您更有說服力。

那么,我們如何能在PHP的函數中訪問外部的變量呢?

在PHP中,存在一個概念叫做全局作用域,也就是說,如果你不使用函數(未來會有類的概念),那么你創建的變量可以在頁面的任何地方訪問。那么,我們怎么解決函數體內的問題呢?

我們可以使用global關鍵字:

  <?php 
    $name="kym";
    function Test()
    {
      global $name;
      echo($name);
    }
    Test();
  ?>

這樣的話,我們就相當于得到了對全局變量$name的一個引用,而不需要重新創建一個$name變量了。

在PHP手冊中有這樣一句話:使用全局變量等效于在$GLOBALS變量中創建一個對變量的引用。那么我們就可以模仿這個語義寫出這樣的代碼:

  <?php 
    $name="kym";
    function Test()
    {
      $temp=&$GLOBALS["name"];
      echo($temp);
    }
    Test();
  ?>

其實這兩種是等效的代碼。看上去這樣使用變量很麻煩,但是這樣其實避免了很多副作用的產生,如Java,C#是面向對象的語言,但是在PHP中,一切都在一個頁面,甚至多個頁面中,那么如果不使用這樣的辦法,很容易產生函數的副作用(誤修改)。

2. 默認參數

第一次聽過這個概念應該是在C++中,之后學了C#,就沒有接觸過這個概念了,不過個人還是非常喜歡這個特性的。

這樣就可以不必要為一個函數寫一堆麻煩的重載函數了。

寫個最簡單的例子:

  <?php 
    function Test($name="kym")
    {
      echo($name);
    }
    Test();
    Test("others");
  ?>

是不是不需要寫一個重載函數了呢?

但是在這里需要注意兩點:

A. 在為參數設置默認值時,只能設置最簡單的常量,而不能包含復雜的表達式。

B. 需要設置默認值的參數必須放在最后。這個類似于C#中的可變參數。

3. 可變參數

在C#中,就存在這樣一個概念叫可變參數,寫個簡單的例子:

protected void LinkButton1_Click(object sender, EventArgs e)
{
  Response.Write(GetSum(1, 2, 3, 4, 5));
}
public int GetSum(params int[] elements)
{
  int sum = 0;
  for (int i = 0; i < elements.Length; i++)
  {
    sum += elements[i];
  }
  return sum;
}

在寫例子之前,我先來介紹三個與可變參數相關的函數。

func_get_args()返回函數的所有參數的數組

func_get_arg()返回一個來自參數的特定參數

func_num_args()返回參數的個數。

好,那么接下來就寫一個和C#版本對應的PHP版本。

  <?php 
    function GetSum()
    {
      if(func_num_args()==0)
      {
        return 0;
      }
      $sum=0;
      for($i=0;$i<func_num_args();$i++)
      {
        $sum+=func_get_arg($i);
      }
      return $sum;  
    }
    echo(GetSum(1,2,3,4));
  ?>

4. 可變函數

我不知道為什么要翻譯成這個名字,其實就是根據變量的名字來調用相應的函數。

很類似于JS中的這個eval,如下所示:

<script>
  function Execute(functionName)
  {
    eval(functionName+"()");
  }
  function Test()
  {
    alert("111");
  }
  Execute("Test");
</script>

這個就是傳進來一個函數名,然后來執行對應的函數。那么在PHP中,其實也是一樣的,而且更簡單了。

<?php 
  function Test($func)
  {
    $func();
  }
  function First(){echo("first");}
  Test("First");
?>

主站蜘蛛池模板: 秘社| 原来这就是爱啊 电视剧| 茉莉2| love 电影| 韩诗雅| nina hartley| 小霸王解说呐| 繁花分集剧情| 解决问题五上数学| 印度西施| 赵琦| 大决战全部演员表介绍图片| 打开双腿扒开打屁股羞辱惩罚视频 | 都市频道在线直播观看| 我的新学校英语作文| 赖小子在线观看完整视频高清| 张学明| 电影善良的妻子| 复制情人之意识转移| 小小春| 伊利亚伍德| 电影《正青春》| 《与凤行》演员表| 肱骨骨折能评几级伤残| 性的秘密| 口舌| 张扬导演| 罪孽天使| 永恒传说图文详细攻略| yumiko| 白鲸 电影| 王宝强盲井| 男人天堂视频| 天才不能承受之重| 拔萝卜无删减| 色戒在线观看视频| 我的冠军男友在线看全集完整| 变形金刚1原版免费观看| 黄视频在线网站| po参加的综艺节目| 电影《ol3》完整版在线观看|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103