天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

一步一步學習PHP(4) php 函數 補充2

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");?>

php技術一步一步學習PHP(4) php 函數 補充2,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品久久香蕉国产线看观看麻豆 | 苍井空教师BD在线观看全集 | WWW夜片内射视频在观看视频 | 美女张开腿露出尿口扒开来摸动漫 | 欧美人与禽zoz0性伦交app | 日韩视频中文字幕精品偷拍 | 国产99九九久久无码熟妇 | 麻豆精品传媒一二三区 | 最新亚洲人成网站在线影院 | 玩弄朋友娇妻呻吟交换电影 | 亚洲视频中文字幕在线观看 | 天天插天天射天天干 | yellow日本动漫高清 | 果冻传媒2021精品影视 | 国产永久视频 | 甜性涩爱全集在线观看 | A级韩国乱理伦片在线观看 a级成人免费毛片完整版 | 2019夜夜 | 亚洲人成在线观看一区二区 | 久久中文字幕亚洲精品最新 | 啪啪漫画无遮挡全彩h同人 啪啪激情婷婷久久婷婷色五月 | 理论片午午伦夜理片影院 | 亚洲精品久久久久无码AV片软件 | 嫩草影院地址一二三 | 久久综久久美利坚合众国 | 色迷迷电影 | 一色屋精品亚洲香蕉网站 | 美女扒开腿让男生桶爽免费APP | sao虎影院桃红视频在线观看 | 丰满少妇69激懒啪啪无码 | 日本妞欧洲 | 乌克兰黄色录像 | 国产精品久久久久久精品... | 超碰97免费人妻 | 無码一区中文字幕少妇熟女H | a视频在线观看免费 | 国产精品久久人妻互换毛片 | 成人中文字幕在线 | 久9视频这里只有精品123 | av狼新人开放注册区 | AAA级精品无码久久久国片 |