Static(静态)关键字

通过函数改变内部属性的值:

 1 <?php
 2 
 3 class Human{
 4     public $name;
 5     protected $height;  
 6     public $weight;
 7     private $isHungry = true; 
 8 
 9 }
10 
11 
12 class NbaPlayer extends Human{
13     
14     public $team="Bull";
15     public $playerNumber="23";
16 
17     public $president = "David Stern";
18 
19     public function changePresident($newPrsdt) {
20         $this->president = $newPrsdt;
21     }   
22 }
23 
24 $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
25 $james = new NbaPlayer("James","203cm","120kg","Heat","6");
26 
27 $jordan->changePresident("Adan Silver");
28 echo "Jordan:".$jordan->president ."<br/>";
29 echo "James:".$james->president ."<br/>";

这时,通过 $jordan->changePresident("Adan Silver"); 来改变jordan的president,

如何同时改变jordan和james的president的值呢,这就需要使用Static静态变量了

 1 <?php
 2 
 3 class Human{
 4     public $name;
 5     protected $height;  
 6     public $weight;
 7     private $isHungry = true; 
 8 
 9 }
10 
11 
12 class NbaPlayer extends Human{
13     
14     public $team="Bull";
15     public $playerNumber="23";
16     //静态属性定义在访问控制关键字后面添加static关键字即可
17     public static $president = "David Stern";
18     //静态方法实在function前面加上static
19     public static function changePresident($newPrsdt) {
20         //在类定义使用静态成员的时候,用self关键字后面跟着::操作符
21         //在访问静态成员属性的时候,::后面需要跟$符号
22         self::$president = $newPrsdt;
23     }   
24 }
25 //在类定义外部访问静态属性,我们可以用类名加::操作符来访问类的静态成员
26 echo NbaPlayer::$president." before changed"."<br/>";
27 NbaPlayer::changePresident("Adam Silver");
28 echo NbaPlayer::$president." after changed" . "<br/>";

输出结果:

1 David Stern before changed
2 Adam Silver after changed

 

然后我们再讨论子类静态函数调用父类的静态变量

 1 <?php
 2 
 3 class Human{
 4     public $name;
 5     protected $height;  
 6     public $weight;
 7     private $isHungry = true; 
 8     public static $sValue= "static value in Human class "."<br/>";
 9 
10 }
11 
12 class NbaPlayer extends Human{
13     
14     public $team="Bull";
15     public $playerNumber="23";
16     private $age = "40";
17     //静态属性定义在访问控制关键字后面添加static关键字即可
18     public static $president = "David Stern";
19     //静态方法实在function前面加上static
20     public static function changePresident($newPrsdt) {
21         //在类定义使用静态成员的时候,用self或者static关键字后面跟着::操作符
22         //在访问静态成员属性的时候,::后面需要跟$符号
23         self::$president = $newPrsdt;
24         //使用parent关键字就能够访问父类的静态成员
25         echo parent::$sValue;
26         //静态函数不能访问动态的属性
27         //echo->age;  这里会出错
28     }   
29 }
30 //在类定义外部访问静态属性,我们可以用类名加::操作符来访问类的静态成员
31 echo NbaPlayer::$president." before changed"."<br/>";
32 NbaPlayer::changePresident("Adam Silver");
33 echo NbaPlayer::$president." after changed" . "<br/>";
34 //输出父类的静态变量
35 echo Human::$sValue;

输出为:

David Stern before changed
static value in Human class 
Adam Silver after changed
static value in Human class

总结起来就六点:

1、静态属性用于保存类的公有数据
2、静态方法里面只能访问静态属性
3、静态成员不需要实例化对象就可以访问
4、类的内部可以通过self或者static关键字访问自身静态成员
5、可以通过parent关键字访问父类的静态成员
6、可以通过类的名称在类的定义外部访问静态成员

 

posted @ 2015-07-04 11:30  todaytoday  阅读(224)  评论(0编辑  收藏  举报