PHP对象5: define / const /static

define定义全局常量:

define('PATH', '/data/home/www');

 

const也是定义常量, 一般用于类中, 饰成员属性,不可以修饰方法,如下:

class Test{  
    const PATH = 'c/';//修饰常量  
    const function test(){//这种方法是错误的,const无法修饰方法  
    }  
}

在类外部调用的时候, 不用加 $ 号:

    echo Test::PATH;  
    //也可以使用下面的方法调用  
    $test = new Test();  
    echo  $test::PATH;  

在类内部调用的话, 是这样调用:

class Test{  
    const PATH = 'c/';//修饰常量  
    public function ass(){  
        echo $this::PATH.'<br />';  
        echo self::PATH.'<br />';  
    }  
} 

 

 

atatic可以修饰属性, 也可修饰方法。

const虽然很好用,但是一经定义就无法修改值了,但是有的时候我们需要一个属于类的属性,但是又可以修改其值,比如统计此类构造了几个对象,这个时候就是使用static的时候了,在static修饰类的成员变量的时候,它的使用方法基本与const一样。并且static修饰的成员变量的值是可以修改的。


但是当static修饰成员方法的时候,使用方法有一点改变,在类的内部,static修饰的方法内部,无法访问当前类的任何普通成员变量。只可以使用当前类的静态成员变量(static ),和类常量(const)。

也就是说, 一个方法定义成static后, 它只能访问static定义的变量或const定义的变量, 其他(如public)定义的属性无法访问。

 

    class Test{  
        static public $name='asd';  
        const π = 3.1415926;  
        public $age = 10;  
        public static function lenth($r){  
            //echo $this->age;//会发生错误,不能访问普通的成员变量  
            echo Test::$name;  
            return $r*2*self::π;  
              
        }  
        public static function area($r){  
            return $r*$r*self::π;  
        }     
    }  

 

 

访问static的方法是这种形式:

#Char::Join();
#$test->Join();
#$test::Join();
可以这样调用

 

 

    echo '周长:'. Test::lenth(1).'<br/>';  
    echo '面积:'.Test::area(1).'<br/>';  
    $per = new Test();  
    echo $per->lenth(3);  

static的性性访问跟const一样。

 

参考链接:

static变量使用: http://www.cnblogs.com/perl6/p/6436756.html

static方法使用: http://www.cnblogs.com/perl6/p/6437039.html

其他const/static介绍: http://blog.csdn.net/u012368971/article/details/53492555

 

posted on 2017-07-06 03:59  Perl6  阅读(269)  评论(0编辑  收藏  举报

导航