理解Php中的Static
① 使用 static 可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法,比如:
<?php
class China
{
public static $boy = 1;//[修饰词]静态成员属性
public static function getboy()//静态成员方法
{
}
}
?>
②类中的静态成员是不需要实例化对象而使用类名来直接输出访问的
| 类名::静态成员属性名 | 在类的外部和成员方法中都可以使用这种方式访问静态成员属性 |
| 类名::静态成员方法名( ) | 在类的外部和成员方法中都可以使用这种方式访问静态成员方法 |
在类中声明的成员方法中,也可以使用关键字 "self" 来访问其他静态成员。因为静态成员是属于类的,而不是属于任何对象的,所以不能用$this来引用它,而在PHP中给我们提供的self关键字,就是在类的成员方法中用来代表本类的关键字。
| self::静态成员属性名 | 在类的成员方法中使用这种方式访问本类中的静态成员属性 |
| self::静态成员方法名( ) | 在类的成员方法中使用这种方式访问本类中的静态成员方法 |
在类的外部访问类中的静态成员,可以使用 对象引用和上述所说的类名方式访问,但通常选择使用类名来访问。如果在类的内部的成员方法访问其他的静态成员,通常使用self的形式去访问,最好不好直接使用类名称访问。例:
<?php
class Person
{
static $boy = 1;
function nums()
{
return self::$boy;//使用self访问其他静态成员
}
}
echo Person::$boy; //使用类名访问,输出1
$a = new Person();
echo $a->nums();//使用实例化后对象引用,也可输出1
?>
③ static总是唯一存在的
Person类为例,如果在Person类中有一个" $boy_nums=1 "的成员属性(非标识静态),并创建多个对象。任何一个Person类的对象都会拥有自己的一份$boy_name属性,对象之间不会干扰。
<?php
class Person
{
public function add_boy()
{
$boy_nums = 1;
return $boy_nums +=1;
}
}
$no1 = new Person();
$no1->add_boy();
$no2 = new Person();
$no2->add_boy();
$no3 = new Person();
$no3->add_boy();
$no4 = new Person();
echo $no4->add_boy();//实例Person到第四个对象时,add_boy()依旧执行了一次
?>
输出:
2
而 static 成员作为整个类的属性存在,如果将$boy_name属性使用static标识,则不管通过Person类创建多少个对象或者没有对象、这个static成员总是唯一存在的,在多个对象之间共用,因为使用static标识的成员是属于类的,所以与对象实例和其他的类无关。类的静态属性非常类似于函数的全局变量。
<?php
class Person
{
public static $boy_nums = 1;
public function add_boy()
{
return self::$boy_nums +=1;
}
}
$no1 = new Person();
$no1->add_boy();
$no2 = new Person();
$no2->add_boy();
$no3 = new Person();
$no3->add_boy();
$no4 = new Person();
$no4->add_boy();
echo Person::$boy_nums;
?>
输出:
5 可见 add_boy( ) 相对static静态成员执行了4次
④ 注意:静态方法中只能访问访问静态成员。因为非静态成员都必须通过对象的引用来访问,通常是$this来完成,而静态方法在对象不存在的情况下也可以直接使用类名来访问,没有对象也就没有$this引用,没有了$this引用就不能访问类中的非静态成员,但是可以使用类名或self在非静态方法中访问静态成员
<?php
class Person
{
public $girl = 0;
public static $boy = 1;
public static function nums()//标识静态方法
{
echo $this->girl;//写法错误,静态方法只能操作静态变量
}
}
Person::nums();
?>
理解Php中的Static的更多相关文章
- Java中关于static语句块的理解
Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...
- Android 中关于static的使用问题
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- 深入理解JDK中的I/O
深入理解JDK中的I/O 目 录 java内存模型GCHTTP协议事务隔离级并发多线程设计模式清楚redis.memcache并且知道区别mysql分表分库有接口幂等性了解jdk8稍微了解一下特性 j ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- java中的static详解
如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象.static 成员的最常见的例子是main( ) .因为在程序开始执行时必须调用main() ,所以它被声 ...
随机推荐
- Flume 入门--几种不同的Sources
1.flume概念 flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集.聚集和移动,并以集中式的数据存储的系统. flume目前是apache的一个顶级项目. flum ...
- shell 脚本执行日志通用模块
目标 实现记录SHELL执行的開始时间,结束时间.执行状态,错误信息等,以函数封装日志记录的方式,脚本调用函数 源代码 通用函数脚本program_log_new.sh function init_l ...
- 程序猿的编程神器 - vim
一.官方文档: 当你首次安装好 Vim 之后.能够用 :help tutor 或者 :help tutor@cn 命令.进入一个30分钟的 Vim 新手教程.你也能够下载一个 Vim Document ...
- 苹果电脑出现 .DS_Store文件,删除不掉怎么处理?
今天早上打开电脑,发现桌面上出现一个.DS_Store文件.可是出现的莫名其妙,也就没在意,可是重复删除之后还是出现.后来查了一下网上的资料,才知道,昨天我加入git的时候,为了看见 .git这个隐藏 ...
- NSString、NSMutableString基本使用
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- xcode6下使用autolayout+sizeclass实践
历史车轮滚滚向前,将autolayout配合sizeclass做布局的方式推上了主流,虽然有点晚,但最终还是进行了一次完整的实践,特此记录一下: 因为网上已经有很多博客介绍了autolayout配合s ...
- Kia's Calculation(贪心)
pid=4726">http://acm.hdu.edu.cn/showproblem.php? pid=4726 大致题意:给两个长度小于10^6且相等的合法的正整数.你能够随意组合 ...
- 将PL/SQL代码封装在机灵的包中
将代码封装在机灵的包中 http://www.oracle.com/technetwork/issue-archive/2013/13-jan/o13plsql-1872456.html 绝大多数基于 ...
- \n 与 \r
符号 ASCII码 意义 \n 换行NL \r 回车CR 回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return 换行 \n 本义是光标往 ...
- 日文“表” php 会报错
php遇到很奇怪的问题,文字“表”会报错,并且是属于编译错误的问题. 单纯的输出: echo " 表 "; 会直接报错. 可是只要在中间加点东西,就可以解决这个问题,就算是空格都可 ...