属性
类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字public、protected或private开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是常数,常数是指PHP脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。 为了向后兼容PHP4、PHP5声明属性依然可以直接使用关键字var来替代public、protected和private。在PHP5.0到5.1.3,var会被认为是废弃的,并产生E_STRICT警告,但是5.1.3 之后就不再认为是废弃,也不会产生警告。使用var会默认为public。
在类的成员方法中,可以通过伪变量($this)和对象运算符(->)来访问非静态变量,静态属性可以通过范围解析操作符(::)来访问,self::property或$this::property。
PHP5.3起,如果heredoc中不包含变量或其他复杂格式,则可以用来初始化静态变量和类中的属性、常量。PHP5.3引入的nowdoc也可以用于初始化静态变量和类中的属性、常量。
<?php
$name="php";
class A{
static $v="xxx";
static public $v2 = <<<EOD
hello world
EOD;
static public $v3 = <<<'EOA'
$name
EOA;
var $var = 'a default value';
public function displayVar() {
echo $this->var.self::$v.$this::$v3;
}
}
$a=new A();
$a->displayVar();
?>
常量
将在类中始终保持不变的值称为类常量,在定义常量时不需要使用$,而是在常量名前使用const关键字。常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。接口中也可以定义常量。PHP5.3起可以通过变量来动态调用类。变量的值不能为关键字,如self、parent、static等。
范围解析操作符(::)来访问,self::property或$this::property。
<?php
$name="php";
class A{
const cons=<<<EOD
hello constant
EOD;
var $var = 'a default value';
public function displayVar() {
echo self::cons."\n".$this::cons."\n";
}
}
$a=new A();
$a->displayVar();
echo A::cons."\n";
$className="A";
echo $className::cons."\n";
?>