首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下:
[php] view plain copy
1
2
3
4
5
|
class
Test{
const
PATH =
'c/'
;
//修饰常量
const
function
test(){
//这种方法是错误的,const无法修饰方法
}
}
|
const在使用的时候不需要添加权限修饰字段,但是在调用const修饰的常量时是需要技巧的,因为常量是属于整个类的,而不是属于某个对象,所以在调用的时候需要使用类名加域名修饰符,例:
[php] view plain copy
1
2
3
4
|
echo
Test::PATH;
//也可以使用下面的方法调用
$test
=
new
Test();
echo
$test
::PATH;
|
但是在类内部调用的时候就会出现问题,如何在类内部获取当前类名或者当前对象名(php可以根据对象获取类名-反射),php中给我们提供了两个特殊的关键字,如:
[php] view plain copy
1
2
3
4
5
6
7
|
class
Test{
const
PATH =
'c/'
;
//修饰常量
public
function
ass(){
echo
$this
::PATH.
'<br />'
;
echo
self::PATH.
'<br />'
;
}
}
|
其中self(不加$)代表当前类名,$this代表当前对象。这样,我们就可以在类内部调用const修饰的常量了。
接下来我们说说static
const虽然很好用,但是一经定义就无法修改值了,但是有的时候我们需要一个属于类的属性,但是又可以修改其值,比如统计此类构造了几个对象,这个时候就是使用static的时候了,在static修饰类的成员变量的时候,它的使用方法基本与const一样,区别就在于static修饰的属性可以添加权限(7.1的php中const也可以添加,以前的不能),并且static修饰的成员变量的值是可以修改的。
但是当static修饰成员方法的时候,使用方法有一点改变,在类的内部,static修饰的方法体内部,无法访问当前类的任何普通成员变量,准确的来说是无法使用关键字$this,只可以使用当前类的静态成员变量,和类常量。
[php] view plain copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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的过程中,调用的方法与调用static修饰的变量不同,既可以通过类名调用,也可以通过对象名调用,比如:
[php] view plain copy
1
2
3
4
|
echo
'周长:'
. Test::lenth(1).
'<br/>'
;
echo
'面积:'
.Test::area(1).
'<br/>'
;
$per
=
new
Test();
echo
$per
->lenth(3);
|
以上这两种调用方式都是合法的。本文由:http://www.77884.net整理发布。