详解PHP5中static和const关键字的用法

发布时间:2019-07-26编辑:脚本学堂
本文对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.jb200.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"); 
?>