php静态方法怎么调用非静态变量?

php中,静态方法可以使用self关键词来调用非静态变量,例“self::$name”;一个方法被“self::”后,它就自动转变为静态方法。注:静态方法不能调用非静态属性;因为非静态属性需要实例化后,存放在对象里。

推荐:《PHP视频教a 9 ! r Y程》

PHP中静态(st l 5 1 ~ i /atic)g 6 j B [ K x L调用非静态方法详解

这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么l i J ! N样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有V | ( % Y Z一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

实例:

<?px n rhpR P 5
header("content-tyI k X ! P Bpe:text/html;charset=utf-8");
class Human{
static public $name = "小妹";
public $height = 180;
stat8 A u P u ) K ) dic public function tell(){
echo self::$name;//静态方法调用静态属性,使用self关键词
/, X = |/echo $this->height;//错。静态方法不能调用非静态属性
//因为 $this代表实例化对象,而这里是,不知道 $this 代表哪个对象
}
public function say(){
echo self::$name . "我说话了";
//普通方法调用静态属性,同样使用self关键词
echo $this->height;
}
}
$p1 = new Human();X : S @ D ` ~ B
$p1->say();
$p1->tell();//对象可以访问8 O l | P y p静态方法
echo $p1::$name;//对象访问静态e [ ^ x f属性。不能这么访问$p1->n Q , Lame
//因为静态属性的内存位置不在对象里
Human::say();//错。say()方法有$this时出错;没有$this时能出结果
//但php5.4以上会提示
?>

1、静态属性的调用,用self:: ,无论是静态或非静态方法都可以调用静态属性;结论:

2、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;

3、静态方; U , C 9 C法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;

以上就是php静态方法怎么调用非静态变量?的详细内容。