文章出處

通過函數改變內部屬性的值:

 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、可以通過類的名稱在類的定義外部訪問靜態成員

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()