php的类属性其实有两种,一种是类常量,一种是类静态变量。两种容易引起混淆。
如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<?
php
class test
{
const
constvar
=
'hello world'
;
static $
staticvar
=
'hello world'
;
function getStaticvar(){
return self::$staticvar;
}
}
$
obj
=
new
test();
echo test::constvar //输出'hello world'
echo test::staticvar //出错,staticvar 前必须加$才能访问,这是容易和类常量(per-class常量)容易混淆的地方之一
echo test::$staticvar //输出'hello world'
$
str
=
'test'
;
echo $str::$staticvar //出错,类名在这不能用变量动态化
echo $str::constvar //出错原因同上
//在类名称存在一个变量中处于不确定(动态)状态时,只能以以下方式访问类变量
$
obj2
=
new
$str();
echo $obj2->getStaticvar();
?>
<?
php
class test
{
const
constvar
=
'hello world'
;
static $
staticvar
=
'hello world'
;
function getStaticvar(){
return self::$staticvar;
}
}
$
obj
=
new
test();
echo test::constvar //输出'hello world'
echo test::staticvar //出错,staticvar 前必须加$才能访问,这是容易和类常量(per-class常量)容易混淆的地方之一
echo test::$staticvar //输出'hello world'
$
str
=
'test'
;
echo $str::$staticvar //出错,类名在这不能用变量动态化
echo $str::constvar //出错原因同上
//在类名称存在一个变量中处于不确定(动态)状态时,只能以以下方式访问类变量
$
obj2
=
new
$str();
echo $obj2->getStaticvar();
?>
|