最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php中static关键字对变量和函数影响

    在php中static是一个静态变量,他可以定义函数,变量为全局静态变量了,那么我们在函数或变量前面加上static会对函数与变量产生怎么样的影响呢,下面我们一起来看看。

    1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量,全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式,这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

    2) 从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期,把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

    3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

    PHP5.3.0之后,我们可以用一个变量来动态调用类,但该变量的值不能为关键字self,parent或static。

    Example #1 静态成员代码示例:

    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之后可以动态调用 
    18. print Bar::$my_static . " "
    19. $bar = new Bar(); 
    20. print $bar->fooStatic() . " "
    21. ?> 

    Example #2 静态方法代码示例:

    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. ?> 

    关于Static关键字在类中的使用,PHP手册给出了如下的约定:

    1、声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。

    2、由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

    3、静态属性不可以由对象通过->操作符来访问。

    4、用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。 

    现在来关注一下第4条约定。

    运行环境:(Win32) PHP/5.3.3,代码如下:

    1. class Foo{ 
    2.     public static $my_static = 'foo';//声明一个静态成员 
    3.     public function staticValue() {//静态方法   
    4.         return self::$my_static;//   
    5.     }   
    6.     public function run(){//非静态方法   
    7.       return "abc <br>";   
    8.     }   
    9.     public  function callrun() {   
    10.         return self::run();//用self::方式调用一个非静态方法 
    11.     } 
    12. echo Foo::$my_static . "<br >";   
    13. echo Foo::run();//用className::方法名调用非静态方法   
    14. echo Foo::callrun(); 

    面试题之static关键字

    题目代码:写出以下代码的运算结果( ),代码如下:

    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. ?> 

    第一眼以为就是简单地自加计算:以为结果是400,结果答案错误。最后仔细看了下,敲了一边代码,运行才知道是500。打印了两次$i+=$n;计算之前的$i,一次是100,一次是200;知道问题是static在做鬼。然后百度了一下static关键字,才恍然大悟。

    static关键字作用:

    PHP中static变量的使用范围要更广一些,我们不仅可以在类,方法或变量前面添加 static修饰符,我们甚至还能给函数内部变量添加static关键字,添加了static修饰符的变量即使在该函数执行完毕值仍然不会丢失,也就是说,在下一次调用这个函数时,变量仍然记得原来的值,实例代码如下:

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

    运行结果如下:3 5 7

    综上所述:

    static全局变量与普通的全局变量有什么区别: 

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

    static局部变量和普通局部变量有什么区别: 

    static局部变量只被初始化一次,下一次依据上一次结果值; 

    static函数与普通函数有什么区别: 

    static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php中static关键字对变量和函数影响

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级