<?php
/*静态属性和静态方法*/
class StaticExample{
public $say="Tom";
static public $aNum=0;
static public function sayHello(){
self::$aNum++;
echo self::$aNum;
//echo $this->$say;错误,静态方法不能访问非静态属性
//Whosay();不可以调用
}
function Whosay(){
echo $this->say;
echo "+".self::$aNum;//非静态方法访问静态属性,也需要self
self::sayHello();//非静态方法访问静态方法,也需要self
}
}
$example = new StaticExample();
echo StaticExample::$aNum;//0 类::属性名,访问静态属性
echo "<hr />";
StaticExample::sayHello();//1 类::方法名,访问静态方法
echo "<hr />";
$example->sayHello();//2 对象可以访问静态方法
echo "<hr />";
echo $example::$aNum;//2 对象可以访问静态属性
echo "<hr />";
$example->Whosay();
echo "<hr />";
//StaticExample::Whosay();Whosay中没有$this->就能出结果,但php5.4以上会报错
?>
结论:
(1)静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)静态方法不需要实例化即可调用。同上
(3)静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)非静态方法可以调用静态属性和静态方法,前提是使用self关键字
(5)对象可以访问静态方法和属性,不过访问形式不同