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