`
沙漠绿树
  • 浏览: 425517 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PHP5.3中的静态变量

    博客分类:
  • PHP
阅读更多

一、静态变量
1.静态变量是只存在于作用域的变量,不过,在函数执行完成以后,这种变量的值不会丢失,也就是说,在下一次调用这个函数时,变量仍会记得原来的值。
2.将表达式计算出来的结果付给静态变量是不合法的。表达式是指自身的值会发生变化的任何语句,例如(1+1),$variable,anyfunc()都是表达式。
3.你也许会想,定义静态变量似乎并不是很有用,因为可以用全局变量轻松地获取同样的结果。然而,全局变量可以被所有函数访问,所以如果两个或者更多本来应该是独立的函数使用了相同名称的变量,就会导致冲突;并且,比起引入全局变量,使用静态变量也不需要更多的语法。因此,在只有一个函数需要访问某个变量时,我们应该优先使用静态变量,而不是全局变量。

 

二、类中静态元素的使用
4.在类中,static关键字有两种主要的用法,一种是用来定义静态成员,另一种是用来定义静态方法。
5.静态成员是一种类变量,可以把它看成是属于整个类而不是属于类的某个实例。与一般的实例变量不同的是,静态成员只保留一个变量值,而这个变量值对所有的实例都是有效的,也就是说,所有的实例共享这个成员。
6.$this只表示当前类的实例,self::表示类本身(后面加$)
7.作用域限定操作符::
通过作用域限定操作符,我们可以使用两个系统定义的作用域:self和parent。此外,php5.3还提供了static作用域。self表示的是当前类的作用域,不过与$this不同的是,它不表示类的某个特定的实例。在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置。也就是说,在扩展类中使用self作用域时,self可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法。(相当于java中方法的覆盖,明确调用父类的方法用parent)

重写父类的静态变量就在子类中定义一样的静态变量

<?php 
class aaa 
{ 
  function bbb(){ 
  echo '用双冒号::调用类的方法!'; 
  } 
} 

//调用1: 
$a = new aaa(); 
$a->bbb(); 

//调用2: 
aaa::bbb(); 
?>  

  

两种方法得到的结果是一样的.

想不明白,为什么普通方法bbb也可以直接用类名::调用,这好像和java里面的不一样

 

Test.java
class Test{
 
 //普通方法
 public  void eat(){
  System.out.println("no-static!");
 }
 
 //静态方法
 public static void show(){
  System.out.println("static!");
 }
 
 //main方法
 public static void main(String args[]){
 
  Test obj=new Test();
  obj.eat(); //输出no-static!
  obj.show();//方法属于类,类的实例当然也能访问,但是eclipse等编辑器中会黄色提示建议用类名直接调用
             //(The static method show() from the type Test should be accessed in a static way)
  
  Test.show();//输出static
              //Test.eat();//报错 无法从静态上下文中引用非静态 方法 eat()  php却可以忍受。。。
    }
}

  

个人理解:只要被调用的普通方法里不出现$this->xx ($this只表示当前类的实例),普通方法也可以认为是直接属于类的,所以可以直接用类名调用,而不像java中方法必须要声明为static才能用类名直接调用(php6在静态方法的操作方面做了几处修改,首先在访问非静态方法时,不再使用::操作符!这种方式要被干掉了吧。。。)


帮助父类调用子类的方法
php5.3中提出的static::作用域使我们不再需要使用self::和parent::。当希望指向最终的实现类时,就可以使用static::,这个限定符会在代码执行之前立即计算出继承层次结构上最后那个类的成员。这一过程被称为延迟绑定。好像没看出有什么用,直接在父类中new那个最终实现类的对象然后调用不就行了吗?但是如果你不知道那个最终类叫什么,覆盖的方法实现了什么样的效果,这时候似乎就有用了。static::作用域也可以应用在静态方法上,这样从父类可以静态的调用子类的方法。

 

分享到:
评论

相关推荐

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程102:PHP5.3 Xdebug 错误分析与性能调试 PHP100视频教程103:JQuery 之 Javascript 基础(一) PHP100视频教程104:JQuery 之 Javascript 基础(二) PHP100视频教程105:JQuery 之 Javascript ...

    php课程(共100多节)

    102:PHP5.3 Xdebug 错误分析与性能调试 103:JQuery 之 Javascript 基础(一) 104:JQuery 之 Javascript 基础(二) 105:JQuery 之 Javascript 基础(三) 106:JQuery 之语法模式与开发基础

    PHP网络编程技术与实践 源码

    5.3 本章小结 第6章 PHP中的图像处理技术 6.1 图像操作的基本知识 6.1.1 HTML文档中的图像 6.1.2 图像格式简介 6.1.3 安装图像支持GD库 6.1.4 PHP的图像函数 6.2 图像和颜色的绘制 6.2.1 绘制点元素 6.2.2 绘制线框...

    PHP Static延迟静态绑定用法分析

    PHP5.3以后引入了延迟静态绑定static,它是为了解决什么问题呢?php的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。来看一个例子。 class A { public static function echoClass...

    php网络开发完全手册

    5.3 PHP5与PHP4的差异 72 5.4 定义属性和方法 72 5.4.1 属性与方法的定义 72 5.4.2 传统的构造函数 73 5.4.3 PHP类中的一些特殊方法 74 5.5 类的引用、扩展与继承 75 5.5.1 类的引用 75 5.5.2 类的扩展与继承 76 5.6...

    PHP和MySQL Web开发第4版pdf以及源码

    5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 ...

    PHP和MySQL WEB开发(第4版)

    5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 参数的引用...

    PHP和MySQL Web开发第4版

    5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 ...

    五指CMS v2.01简体中文GBK.zip

    − 支持php5.2、php5.3、php5.4、php5.5、php5.6!(推荐使用5.4或更高版本!) − 新增图片模型及前台模板展示 − 新增下载模型及前台模板展示 − 全新会员中心 − 新增短信手机验证 − 新增会员公司模型,...

    AKCMS轻量级CMS系统源码 v5.3.7

    4 修正了PHP5.3+中开启AKCMS的调试模式后提示未来会删除不建议使用的警告信息的问题 5 修正了在Ubuntu+Firefox下,后台登录页的输入框超长变形的问题 6 修正了在Ubuntu+PHP下,无法一键升级、安装模板、安装应用的...

    ThinkPHP实战(夏磊)

    5.3 模型实例化 54 5.3.1new实例化 54 5.3.2M函数实例化 55 5.3.3D函数实例化 55 5.3.4空模型实例化 55 5.4 连贯操作 55 5.4.1where 56 5.4.2table 57 5.4.3alias 57 5.4.4data 58 5.4.5field 58 5.4.6...

    ZendFramework中文文档

    14.1.3. 使用静态 get() 方法 14.2. 标准过滤器类 14.2.1. Alnum 14.2.2. Alpha 14.2.3. BaseName 14.2.4. Digits 14.2.5. Dir 14.2.6. HtmlEntities 14.2.7. Int 14.2.8. RealPath 14.2.9. StringToLower...

    MetInfo企业网站管理系统 v5.2.8

    8.简介栏目下添加下载栏目,下载栏目的子栏目,自定义静态页面的名称,则开启伪静态时,下载栏目的子栏目会跳转到404页面; 9.不同语言网站的首页链接都为默认首页链接; 10.搜索页面搜索出的图片模块内容地址出错;...

    高性能MySQL(第3版).part2

    5.3高性能的索引策略153 5.3.1独立的列153 5.3.2前缀索引和索引选择性153 5.3.3多列索引157 5.3.4选择合适的索引列顺序159 5.3.5聚簇索引162 5.3.6覆盖索引171 5.3.7使用索引扫描来做排序175 5.3.8压缩...

    YouDianCMS

    运行环境:PHP5.2+MYSQL+Zend Optimizer 3.3或PHP5.3+MYSQL+Zend Guard Loader 3.3 一、友点企业网站管理系统YouDianCMS系统特点 1)电脑站+手机站+微信五站合一 节约成本 电脑站、手机站、微信、APP、小程序五站...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    5.3 通过rsync+inotify实现数据的实时备份 5.3.1 rsync的优点与不足 5.3.2 初识inotify 5.3.3 安装inotify工具inotify-tools 5.3.4 inotify相关参数 5.3.5 inotifywait相关参数 5.3.6 企业应用案例:...

    MySQL中文参考手册.chm

    7.1.4 NULL值 7.1.5 数据库,表,索引,列和别名的命名 7.1.5.1 名字的大小写敏感性 7.2 用户变量 7.3 列类型 7.3.1 列类型的存储要求 7.3.5 数字类型 7.3.6 日期和时间类型...

Global site tag (gtag.js) - Google Analytics