• php中的静态变量


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

     

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

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

    Php代码  收藏代码
    <span style="font-size: small;"><?php 
    class aaa 
    { 
      function bbb(){ 
      echo '用双冒号::调用类的方法!'; 
      } 
    } 
    
    //调用1: 
    $a = new aaa(); 
    $a->bbb(); 
    
    //调用2: 
    aaa::bbb(); 
    ?>  </span>
    

      

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

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

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


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

    参考:http://hualong.iteye.com/blog/1051599

  • 相关阅读:
    ADO.NET批量插入数据方法比较
    Thread was being aborted 分析与解决
    第三方刻录软件介绍
    ASP.NET登陆SQL Server数据库
    word 2010页眉页码从第三页开始设置
    误删除、误格式化后的灾难恢复方案
    Asp.Net4.0新特性概述
    ArcGIS Server的切图原理深入
    ArcGIS的缓存技术
    ArcGIS Server操作Mxd文件详细讲解
  • 原文地址:https://www.cnblogs.com/Alight/p/3411589.html
Copyright © 2020-2023  润新知