本文对PHP5中的static和const关键字作用进行了详细的介绍,希望对学习PHP5的朋友有一定的帮助。 1,static在php中,static 关键字在类中有于描述一个成员是静态的,static能够限制外部的访问…,

本文对PHP5中的static和const关键字作用进行了详细的介绍,希望对学习PHP5的朋友有一定的帮助。

1,static
在php中,static 关键字在类中有于描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类无法访问,只对类的实例共享。
类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。
类的静态方法能访问类的静态的属性。

说明:static的成员,必须使用self来访问,使用this会出错 。

this和self的区别,请参考文章: php中this,self,parent的区别

2,const
const是一个定义常量的关键字,类似于C中的#define,能够定义一个常量,在程序中不允许修改。

例子:
 

<?php  
class Counter  
{  
    private static $count = 0; //定义一个静态属性  
    const TYPE_VERSION = 2; //定义一个常量  
    const TYPE_ACTIVED = 1; //定义一个常量  
  
    //构造函数  
    function __construct()  
    {  
        self::$count++;  
    }  
  
    //析构函数  
    function __destruct()  
    {  
        self::$count--;  
    }  
  
    //定义一个静态的方法  
    static function getCount()  
    {  
        return self::$count;  
    }  
  
    //翻译所有的const  
    public static function get_type_list()  
    {  //www.90codes.com
        return array(  
            self::TYPE_VERSION => '版本',  
            self::TYPE_ACTIVED => '激活',  
        );  
    }  
  
    public static function getTypes()  
    {  
        return self::getConstants('TYPE_', __CLASS__, self::get_type_list());  
    }  
  
    public static function getConstants($token, $objectClass, $valOption = array(), $showOnlyOneLabel = false)  
    {  
        $tokenLen = strlen($token);  
  
        $reflection = new ReflectionClass($objectClass); //php built-in  
        $allConstants = $reflection->getConstants(); //constants as array  
  
        $tokenConstants = array();  
        foreach ($allConstants as $name => $val) {  
            if (substr($name, 0, $tokenLen) != $token) continue;  
            if ($showOnlyOneLabel && 1 == count($valOption) && isset($valOption[$val])) {  
                $tokenConstants = $valOption[$val];  
                break;  
            }  
            $tokenConstants[$val] = isset($valOption[$val]) ? $valOption[$val] : $val;  
        }  
        return $tokenConstants;  
    }  
}  
  
print_r(Counter::getTypes());  
//创建一个实例  
$c = new Counter();  
  
//执行打印  
print(Counter::getCount() . "<br>n"); //使用直接输入类名来访问静态方法Counter::getCount  
  
//打印类的版本  
print("Version useed: " . Counter::TYPE_ACTIVED . "<br>n");  
?>