静态方法

静态方法的规则和静态变量是相同的。使用ststic关键字可以将方法标识为静态方法,通过类的名称和作用域限定操作符::可以访问静态方法。

静态方法和非静态方法之间有一个很重要的区别,就是在调用静态方法时,我们不需要创建类的实例。

Program List:用类名作为参数

用类名作为参数可以解决非继承的静态问题。

01 <?php
02 class Fruit {
03     public static $category "I'm fruit";
04      
05     static function find($class)
06     {
07         $vars = get_class_vars($class) ;
08         echo $vars['category'] ;
09     }
10 }
11  
12 class Apple extends Fruit {
13      public static $category "I'm Apple";
14 }
15  
16 Apple::find("Apple");
17 ?>

程序运行结果:

1 I'm Apple
Program List:重写基类方法

在派生类重写基类的方法。

01 <?php
02 class Fruit
03 {
04     static function Foo ( $class __CLASS__ )
05     {
06         call_user_func(array($class'Color'));
07     }
08 }
09  
10 class Apple extends Fruit
11 {
12     static function Foo ( $class __CLASS__ )
13     {
14         parent::Foo($class);
15     }
16  
17     static function Color()
18     {
19         echo "Apple's color is red";
20     }
21 }
22  
23 Apple::Foo(); // This time it works.
24 ?>

程序运行结果:

1 Apple's color is red
Program List:静态数组的使用

静态和const作用域都可以用::操作符访问,如果你想使用::操作符访问数组,你需要事先将数组声明为静态。

01 <?php
02 class Fruit
03 {
04     static $color array('color1' => 'red''color2' => 'yellow');
05 }
06  
07 class Apple
08 {
09     public function __construct()
10     {
11         var_dump(Fruit::$color);
12     }
13 }
14  
15 class Banana
16 {
17   public function __construct()
18   {
19     Fruit::$color = FALSE;
20   }
21 }
22  
23 new Apple();    // prints array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" }
24 echo '<br />';
25 new Banana();
26 new Apple();    // prints bool(false)
27 ?>

程序运行结果:

1 array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" }
2 bool(false)
Program List:再来一个单例模式

Static真的很酷,下面的程序演示了如何获得一个已经存在的实例。

01 <?php
02 class Singleton {
03  
04     private static $instance=null;
05     private $value=null;
06  
07     private function __construct($value) {
08         $this->value = $value;
09     }
10  
11     public static function getInstance() {
12         if ( self::$instance == null ) {
13             echo "<br>new<br>";
14             self::$instance new Singleton("values");
15         
16         else {
17             echo "<br>old<br>";
18         }
19         return self::$instance;
20     }
21  
22 }
23  
24 $x = Singleton::getInstance();
25 var_dump($x); // returns the new object
26 $y = Singleton::getInstance();
27 var_dump($y); // returns the existing object
28 ?>

程序运行结果:

1 new
2 object(Singleton)#1 (1) { ["value:private"]=> string(6) "values" }
3 old
4 object(Singleton)#1 (1) { ["value:private"]=> string(6) "values" }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值