日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > php中static關(guān)鍵字對(duì)變量和函數(shù)影響

php中static關(guān)鍵字對(duì)變量和函數(shù)影響

來(lái)源:程序員人生   發(fā)布時(shí)間:2013-10-12 16:31:16 閱讀次數(shù):2531次

在php中static是一個(gè)靜態(tài)變量,他可以定義函數(shù),變量為全局靜態(tài)變量了,那么我們?cè)诤瘮?shù)或變量前面加上static會(huì)對(duì)函數(shù)與變量產(chǎn)生怎么樣的影響呢,下面我們一起來(lái)看看。

1) 全局變量(外部變量)的說(shuō)明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量,全局變量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式,這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(qū)別在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的,而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。

2) 從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期,把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。

3) static函數(shù)與普通函數(shù)作用域不同,僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說(shuō)明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說(shuō)明和定義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說(shuō)明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件

PHP5.3.0之后,我們可以用一個(gè)變量來(lái)動(dòng)態(tài)調(diào)用類,但該變量的值不能為關(guān)鍵字self,parent或static。

Example #1 靜態(tài)成員代碼示例:

  1. <?php 
  2. class Foo 
  3.     public static $my_static = 'foo'
  4.     public function staticValue() { 
  5.         return self::$my_static
  6.     } 
  7. class Bar extends Foo 
  8.     public function fooStatic() { 
  9.         return parent::$my_static
  10.     } 
  11. print Foo::$my_static . " "
  12. $foo = new Foo(); 
  13. print $foo->staticValue() . " "
  14. print $foo->my_static . " ";      // Undefined "Property" my_static 
  15. print $foo::$my_static . " "
  16. $classname = 'Foo'
  17. print $classname::$my_static . " "// PHP 5.3.0之后可以動(dòng)態(tài)調(diào)用 
  18. print Bar::$my_static . " "
  19. $bar = new Bar(); 
  20. print $bar->fooStatic() . " "
  21. ?> 

Example #2 靜態(tài)方法代碼示例:

  1. <?php 
  2. class Foo { 
  3.     public static function aStaticMethod() { 
  4.         // ... 
  5.     } 
  6. Foo::aStaticMethod(); 
  7. $classname = 'Foo'
  8. $classname::aStaticMethod(); // As of PHP 5.3.0 
  9. ?> 

關(guān)于Static關(guān)鍵字在類中的使用,PHP手冊(cè)給出了如下的約定:

1、聲明類成員或方法為static,就可以不實(shí)例化類而直接訪問(wèn)。不能通過(guò)一個(gè)對(duì)象來(lái)訪問(wèn)其中的靜態(tài)成員(靜態(tài)方法除外)。

2、由于靜態(tài)方法不需要通過(guò)對(duì)象即可調(diào)用,所以偽變量$this在靜態(tài)方法中不可用。

3、靜態(tài)屬性不可以由對(duì)象通過(guò)->操作符來(lái)訪問(wèn)。

4、用::方式調(diào)用一個(gè)非靜態(tài)方法會(huì)導(dǎo)致一個(gè)E_STRICT級(jí)別的錯(cuò)誤。 

現(xiàn)在來(lái)關(guān)注一下第4條約定。

運(yùn)行環(huán)境:(Win32) PHP/5.3.3,代碼如下:

  1. class Foo{ 
  2.     public static $my_static = 'foo';//聲明一個(gè)靜態(tài)成員 
  3.     public function staticValue() {//靜態(tài)方法   
  4.         return self::$my_static;//   
  5.     }   
  6.     public function run(){//非靜態(tài)方法   
  7.       return "abc <br>";   
  8.     }   
  9.     public  function callrun() {   
  10.         return self::run();//用self::方式調(diào)用一個(gè)非靜態(tài)方法 
  11.     } 
  12. echo Foo::$my_static . "<br >";   
  13. echo Foo::run();//用className::方法名調(diào)用非靜態(tài)方法   
  14. echo Foo::callrun(); 

面試題之static關(guān)鍵字

題目代碼:寫(xiě)出以下代碼的運(yùn)算結(jié)果( ),代碼如下:

  1. <?php 
  2. function dewen(){ 
  3.   $k=add_number(100);  
  4.   $k+=add_number(100);  
  5.   printf("%d",$k);  
  6.   return 0; 
  7.  } 
  8.  function add_number($n){ 
  9.   static $i=100; 
  10.   $i+=$n
  11.   return $i;  
  12.  } 
  13. ?> 

第一眼以為就是簡(jiǎn)單地自加計(jì)算:以為結(jié)果是400,結(jié)果答案錯(cuò)誤。最后仔細(xì)看了下,敲了一邊代碼,運(yùn)行才知道是500。打印了兩次$i+=$n;計(jì)算之前的$i,一次是100,一次是200;知道問(wèn)題是static在做鬼。然后百度了一下static關(guān)鍵字,才恍然大悟。

static關(guān)鍵字作用:

PHP中static變量的使用范圍要更廣一些,我們不僅可以在類,方法或變量前面添加 static修飾符,我們甚至還能給函數(shù)內(nèi)部變量添加static關(guān)鍵字,添加了static修飾符的變量即使在該函數(shù)執(zhí)行完畢值仍然不會(huì)丟失,也就是說(shuō),在下一次調(diào)用這個(gè)函數(shù)時(shí),變量仍然記得原來(lái)的值,實(shí)例代碼如下:

  1. <?php  
  2. function test()  
  3. {  
  4.       static $var1 =1;  
  5.       $var1 +=2;  
  6.       echo $var1 . ' ' ;  
  7. }   
  8.  test();  
  9.  test();  
  10.  test();  
  11. ?> 

運(yùn)行結(jié)果如下:3 5 7

綜上所述:

static全局變量與普通的全局變量有什么區(qū)別: 

static全局變量只初使化一次,防止在其他文件單元中被引用; 

static局部變量和普通局部變量有什么區(qū)別: 

static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值; 

static函數(shù)與普通函數(shù)有什么區(qū)別: 

static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 久久精品99国产精品日本 | 日韩欧美高清 | 久久久国产精品一区 | 青青草欧美 | 亚洲精品国产精品久久99热 | 懂色av午夜一区二区三区蜜桃 | 逼逼操 | 一级黄色片一级黄色片 | 91中文视频 | 中文字幕综合在线 | 国产黄页在线观看 | 久久国产精 | 亚洲成人精品在线 | 最新的中文字幕 | 国产一级黄 | 久久全国免费视频 | 精品一区二区电影 | 久久免费精品 | 国产精品视频播放 | 欧美成人午夜电影 | 成人精品鲁一区一区二区 | 高清免费毛片 | 国产在线一区二区三区 | 久久wwww| 日韩成人影院在线 | 日韩在线观看中文字幕 | 亚洲一区二区在线免费观看 | 天天舔天天干天天操 | 婷婷精品视频 | 国精产品一区二区 | www.a级毛片 伊人成人在线 | 亚洲精品一| 黄色网址在线免费 | 欧美三级韩国三级日本三斤 | 日韩中文一区二区 | 中文字幕一区二区三区四区 | 国产精品久久久久久久久久久免费看 | 亚洲国产精品久久久久秋霞不卡 | 天堂在线免费观看 | 黄色高清免费 |