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

一步一步學(xué)習(xí)PHP(4) php 函數(shù) 補(bǔ)充2

1. 解決作用域問(wèn)題

在上一節(jié)談到了php中函數(shù)的作用域問(wèn)題,如果說(shuō)類還不夠說(shuō)明問(wèn)題,那么在這篇文章中的作用域例子,也許對(duì)您更有說(shuō)服力。

那么,我們?nèi)绾文茉?a href=/itjie/phpjishu/ target=_blank class=infotextkey>php的函數(shù)中訪問(wèn)外部的變量呢?

php中,存在一個(gè)概念叫做全局作用域,也就是說(shuō),如果你不使用函數(shù)(未來(lái)會(huì)有類的概念),那么你創(chuàng)建的變量可以在頁(yè)面的任何地方訪問(wèn)。那么,我們?cè)趺唇鉀Q函數(shù)體內(nèi)的問(wèn)題呢?

我們可以使用global關(guān)鍵字:

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

這樣的話,我們就相當(dāng)于得到了對(duì)全局變量$name的一個(gè)引用,而不需要重新創(chuàng)建一個(gè)$name變量了。

php手冊(cè)中有這樣一句話:使用全局變量等效于在$GLOBALS變量中創(chuàng)建一個(gè)對(duì)變量的引用。那么我們就可以模仿這個(gè)語(yǔ)義寫出這樣的代碼:

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

其實(shí)這兩種是等效的代碼。看上去這樣使用變量很麻煩,但是這樣其實(shí)避免了很多副作用的產(chǎn)生,如Java,C#是面向?qū)ο蟮恼Z(yǔ)言,但是在php中,一切都在一個(gè)頁(yè)面,甚至多個(gè)頁(yè)面中,那么如果不使用這樣的辦法,很容易產(chǎn)生函數(shù)的副作用(誤修改)。

2. 默認(rèn)參數(shù)

第一次聽(tīng)過(guò)這個(gè)概念應(yīng)該是在C++中,之后學(xué)了C#,就沒(méi)有接觸過(guò)這個(gè)概念了,不過(guò)個(gè)人還是非常喜歡這個(gè)特性的。

這樣就可以不必要為一個(gè)函數(shù)寫一堆麻煩的重載函數(shù)了。

寫個(gè)最簡(jiǎn)單的例子:

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

 

是不是不需要寫一個(gè)重載函數(shù)了呢?

但是在這里需要注意兩點(diǎn):

A. 在為參數(shù)設(shè)置默認(rèn)值時(shí),只能設(shè)置最簡(jiǎn)單的常量,而不能包含復(fù)雜的表達(dá)式。

B. 需要設(shè)置默認(rèn)值的參數(shù)必須放在最后。這個(gè)類似于C#中的可變參數(shù)。

3. 可變參數(shù)

在C#中,就存在這樣一個(gè)概念叫可變參數(shù),寫個(gè)簡(jiǎn)單的例子:

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;}

在寫例子之前,我先來(lái)介紹三個(gè)與可變參數(shù)相關(guān)的函數(shù)。

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

func_get_arg()返回一個(gè)來(lái)自參數(shù)的特定參數(shù)

func_num_args()返回參數(shù)的個(gè)數(shù)。

好,那么接下來(lái)就寫一個(gè)和C#版本對(duì)應(yīng)的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. 可變函數(shù)

我不知道為什么要翻譯成這個(gè)名字,其實(shí)就是根據(jù)變量的名字來(lái)調(diào)用相應(yīng)的函數(shù)。

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

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

這個(gè)就是傳進(jìn)來(lái)一個(gè)函數(shù)名,然后來(lái)執(zhí)行對(duì)應(yīng)的函數(shù)。那么在php中,其實(shí)也是一樣的,而且更簡(jiǎn)單了。

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

php技術(shù)一步一步學(xué)習(xí)PHP(4) php 函數(shù) 補(bǔ)充2,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久深夜视频 | 偷上邻居熟睡少妇 | 国产麻豆AV伦 | 国产自啪偷啪视频在线 | 97视频免费在线观看 | 亚洲 视频 在线 国产 精品 | 青春禁区动漫免费观看 | 国产精品亚洲高清一区二区 | 中文字幕久精品视频在线观看 | 欧美日韩亚洲第一区在线 | 一个人免费观看在线视频播放 | 99视频免费播放 | 伸到同桌奶罩里捏她胸h | 女同志videos最新另 | 9277在线观看免费高清完整版 | 国产亚洲视频精彩在线播放 | 91情国产l精品国产亚洲区 | 99热视频这里只有久久精品 | 97人妻精品全国免费视频 | 免费观看久久 | 91精品福利一区二区 | 日本久久久久亚洲中字幕 | 甜涩性爱下载 | 两个人看的www免费高清直播 | 无套内谢大学生A片 | 午夜理论电影在线观看亚洲 | 性西欧俄罗斯极品 | 色欲AV精品人妻一区二区麻豆 | 国产综合91 | 国产精自产拍久久久久久蜜 | 久久伊人天堂视频网 | 国产人在线成免费视频 | 亚洲精品天堂无码中文字幕影院 | 国产精品色吧国产精品 | 欧美黄色第一页 | 粗好大用力好深快点漫画 | 日韩 国产 中文 无码 | 亚洲高清无在码在线无弹窗 | 青年医生插曲 | 人人草人人草 | 成人伊人青草久久综合网 |