PHP靜態方法和普通方法的區別


 1 <?php 
 2 header('content-type:text/html;charset=utf-8'); 
 3 /* 
 4 普通方法,存放類內,只有一份
 5  
 6 靜態方法,也是存放於類內,只有一份
 7  
 8 區別在於:普通方法需要對象去調用,需要綁定$this 
 9 即,普通方法,必須要有對象,然后讓對象來調用 
10  
11 而靜態方法,不屬於哪一個對象,因此不需要綁定$this 
12 即,不需要對象也可以調用 
13 */
14  
15 class Human{ 
16   static public $head=1; 
17   public function easyeat(){ 
18     echo '普通方法吃飯<br />'; 
19   } 
20   static public function eat(){ 
21     echo '靜態方法吃飯<br />'; 
22   } 
23   public function intro(){ 
24     echo $this->name; 
25   } 
26 } 
27 Error_reporting(E_ALL|E_STRICT); 
28 //此時沒有對象!方法可以執行 
29 Human::eat(); 
30 /* 
31 以下方法easyeat是一個非靜態方法,就由對象來調用,但,用類來調用此方法來也可以執行,而嚴格狀態下,此方法會執行,同時報錯, 
32 Strict Standards: Non-static method Human::easyeat() should not be called statically in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 32
33  
34 */
35 Human::easyeat(); 
36 /* 
37 接上,從邏輯來理解,如果用類名靜態調用非靜態(普通)方法 
38 比如:intro() 
39 那么,這個$this是指哪個對象呢?? 
40 因此會報錯,因為找不到對象! 
41 Fatal error: Using $this when not in object context in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 23 
42 */
43 Human::intro();
44  
45 /* 
46 如上分析,其實,非靜態方法,是不能由類名靜態調用的,但目前,php中的面向對象檢測不夠嚴格,只要靜態方法中沒有$this關鍵字,就會轉化成靜態方法來處理! 
47 */
48 $li=new Human(); 
49 $li->eat();
50  
51 /* 
52 總結: 
53 類》訪問->靜態方法(類的方法)->可以 
54 類》訪問->普通方法(對象的方法)->不可以(雖然方法里不用$this關鍵字時,可以!但不支持這種寫法)
55  
56 對象》訪問》靜態方法(類的方法)->可以 
57 對象》訪問》普通方法(對象的方法)->可以
58  
59 */
60 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM