PHP自学之路------static,global用法

1、下面是全局变量使用:

[php] view plain copy
 
 print?
  1. <?php  
  2.     //定义,全局变量  
  3.     global $global_nums;  
  4.     //赋值  
  5.     $global_nums=0;  
  6.     class Child{  
  7.         public $name;  
  8.   
  9.         function __construct($name){  
  10.             $this->name=$name;  
  11.         }  
  12.   
  13.         public function join_game(){  
  14.             global $global_nums;  
  15.             $global_nums+=1;  
  16.             echo $this->name."加入堆雪人游戏<br/>";  
  17.         }  
  18.     }  
  19.     //创建3个小孩  
  20.     $child1=new Child("aaa");  
  21.     $child1->join_game();  
  22.     $child2=new Child("bbb");  
  23.     $child2->join_game();  
  24.     $child3=new Child("ccc");  
  25.     $child3->join_game();  
  26.       
  27.     echo $global_nums;  
  28. ?>  

注意:全局变量只能先定义,再进行初始化,不能直接初始化,或初始化和定义写到一起。

2、static 静态变量使用
[php] view plain copy
 
 print?
  1. <?php  
  2.       
  3.     class Child{  
  4.         public $name;  
  5.                 public static $nums=0;  
  6.         function __construct($name){  
  7.             $this->name=$name;  
  8.         }  
  9.   
  10.         public function join_game(){  
  11.             //类内部访问 2中如下  
  12.             //Child::$nums+=1;  
  13.             self::$nums+=1;  
  14.             echo $this->name."加入堆雪人游戏<br/>";  
  15.         }  
  16.     }  
  17.     //创建3个小孩  
  18.     $child1=new Child("aaa");  
  19.     $child1->join_game();  
  20.     $child2=new Child("bbb");  
  21.     $child2->join_game();  
  22.     $child3=new Child("ccc");  
  23.     $child3->join_game();  
  24.     $child4=new Child("ddd");  
  25.     $child4->join_game();  
  26.     //外部访问  
  27.     echo Child::$nums;  
  28. ?>  

静态变量只能定义在类中,使该类的所有对象共享的变量,任何一个该类的对象去访问他时,取到的数值都是一样的,同样任何一个该类的变量去修改他时,修改的都是同一个变量。

如何访问静态变量:

在类外部:类名::$类变量名

在类内部:self::$类变量名  或者   类名::$类变量名

具体在内存的分配情况见下图:

 

下面是简单的实例,加深对上面的理解:

[php] view plain copy
 
 print?
  1. <?php  
  2.    /* 
  3.    //第一种情况 
  4.    class Person{ 
  5.        public static $a=90; 
  6.    } 
  7.    echo Person::$a; 
  8.    // 输出不会报错打印:90 
  9. */  
  10.  /* 
  11.    //第二种情况“ 
  12.    class Person{ 
  13.        public static $a=900; 
  14.  
  15.        public function __construct(){ 
  16.            $this->a=45;//(1) 
  17.             
  18.        } 
  19.    } 
  20.    echo Person::$a; 
  21.    //不会报错,输出900;(1)写法是错误的,但是因为没有创建对象, 
  22.    //所以不会被调用,也就不会出错~ 
  23. */  
  24.   
  25.    //第三种情况“  
  26.    class Person{  
  27.        public static $a=9011;  
  28.   
  29.        public function __construct(){  
  30.            $this->a=45;//(1)          
  31.        }  
  32.    }  
  33.      $p1=new Person();  
  34.    echo Person::$a;  
  35.    //;(1)写法是错误的,但是因为创建了对象,被调用  
  36. ?>  
posted @ 2016-12-24 22:34  天涯海角路  阅读(114)  评论(0)    收藏  举报