您的位置:首页 > 编程语言 > PHP开发

php面向对象中static静态属性和静态方法的调用

2017-05-16 00:00 316 查看
摘要:这里分析了PHP面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
header("content-type:text/html;charset=utf-8");
classHuman{
staticpublic$name="小妹";
public$height=180;
staticpublicfunctiontell(){
echoself::$name;//静态方法调用静态属性,使用self关键词
//echo$this->height;//错。静态方法不能调用非静态属性
//因为$this代表实例化对象,而这里是类,不知道$this代表哪个对象
}
publicfunctionsay(){
echoself::$name."我说话了";
//普通方法调用静态属性,同样使用self关键词
echo$this->height;
}
}
$p1=newHuman();
$p1->say();
$p1->tell();//对象可以访问静态方法
echo$p1::$name;//对象访问静态属性。不能这么访问$p1->name
//因为静态属性的内存位置不在对象里
Human::say();//错。say()方法有$this时出错;没有$this时能出结果
//但php5.4以上会提示
?>
结论:

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

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

3、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: