TShopping

 找回密碼
 註冊
搜索
查看: 631|回復: 2

[教學] PHP的靜態方法介紹

[複製鏈接]
發表於 2013-7-19 13:28:54 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
靜態方法的規則和靜態變量是相同的。使用ststic關鍵字可以將方法標識為靜態方法,通過類的名稱和作用域限定操作符::可以訪問靜態方法。
靜態方法和非靜態方法之間有一個很重要的區別,就是在調用靜態方法時,我們不需要創建類的實例。
Program List:用類名作為參數個用類名作為參數可以解決非繼承的靜態問題。


  1. <?php
  2. class Fruit {
  3. public static $category = "I'm fruit";

  4. static function find($class)
  5. {
  6. $vars = get_class_vars($class) ;
  7. echo $vars['category'] ;
  8. }
  9. }

  10. class Apple extends Fruit {
  11. public static $category = "I'm Apple";
  12. }

  13. Apple::find("Apple");
  14. ?>
複製代碼




程序運行結果:

  1. I'm Apple
複製代碼




Program List:重寫基類方法在派生類重寫基類的方法。


  1. <?php
  2.   class Fruit {
  3.     static function Foo ( $class = __CLASS__ ) {
  4.       call_user_func(array($class, 'Color'));
  5.     }
  6.   }

  7.   class Apple extends Fruit {
  8.     static function Foo ( $class = __CLASS__ ) {
  9.       parent::Foo($class);
  10.     }

  11.     static function Color() {
  12.       echo "Apple's color is red";
  13.     }
  14.   }

  15.   Apple::Foo(); // This time it works.
  16. ?>
複製代碼




程序運行結果:
  1. Apple's color is red
複製代碼




Program List:靜態數組的使用靜態和const作用域都可以用::操作符訪問,如果你想使用::操作符訪問數組,你需要事先將數組聲明為靜態。


  1. <?php
  2.   class Fruit {
  3.     static $color = array('color1' => 'red', 'color2' => 'yellow');
  4.   }

  5.   class Apple {
  6.     public function __construct() {
  7.       var_dump(Fruit::$color);
  8.     }
  9.   }

  10.   class Banana {
  11.     public function __construct() {
  12.       Fruit::$color = FALSE;
  13.     }
  14.   }

  15.   new Apple(); // prints array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" }
  16.   echo '<br />';
  17.   new Banana();
  18.   new Apple(); // prints bool(false)
  19. ?>
複製代碼





程序運行結果:

  1. array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" }
  2. bool(false)
複製代碼




Program List:再來一個單例模式Static真的很酷,下面的程序演示了如何獲得一個已經存在的實例。


  1. <?php
  2.   class Singleton {
  3.     private static $instance=null;
  4.     private $value=null;

  5.     private function __construct($value) {
  6.       $this->value = $value;
  7.     }

  8.     public static function getInstance() {
  9.       if ( self::$instance == null ) {
  10.         echo "<br>new<br>";
  11.         self::$instance = new Singleton("values");
  12.       }  else  {
  13.         echo "<br>old<br>";
  14.       }
  15.       return self::$instance;
  16.     }
  17.   }

  18.   $x = Singleton::getInstance();
  19.   var_dump($x); // returns the new object
  20.   $y = Singleton::getInstance();
  21.   var_dump($y); // returns the existing object
  22. ?>
複製代碼




程序運行結果:

複製代碼





 

臉書網友討論
發表於 2014-8-3 14:10:08 | 顯示全部樓層


  神马 o(∩_∩)o 哈哈

版主招募中

發表於 2014-9-20 10:37:42 | 顯示全部樓層

    真的这么神奇?


您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-10 03:29 , Processed in 0.078857 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表