`
沙漠绿树
  • 浏览: 430236 次
  • 性别: 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::作用域也可以应用在静态方法上,这样从父类可以静态的调用子类的方法。

 

分享到:
评论

相关推荐

    PHP5.3.2011中文帮助文档手册

    3. **晚期静态绑定(Late Static Bindings)**:在继承链中调用静态方法时,PHP5.3引入了晚期静态绑定,允许调用子类中的静态方法,即使在父类中进行调用。 4. **类常量(Class Constants)**:开发者可以在类定义...

    PHP.zip_php5.3_php5.3 chm

    Closure对象是匿名函数的实例,可以存储在变量中并在后续的代码中使用。 ### 7. 轻量级对象 PHP 5.3引入了轻量级对象,提高了创建和操作对象的性能。这意味着在处理大量对象时,内存消耗将减少。 ### 8. 新的日期...

    PHP5.3入门经典(Beginning PHP 5.3)源码+中文PDF+英文PDF

    3. **闭包(Closure)**:闭包是PHP5.3引入的另一大亮点,它是一种匿名函数,可以捕获其所在作用域的变量,这在处理回调函数、异步编程或延迟执行等场景中非常有用。 4. **改进的错误处理**:PHP5.3支持异常处理,...

    php5.3版本中文全手册及正确的打开方式

    它们可以在运行时创建,可以作为参数传递,也可以存储在变量中。这对于回调函数和事件处理等场景非常有用。 此外,PHP 5.3 还增强了异常处理机制。通过引入 try-catch 语句,开发者可以更好地控制程序流程,处理...

    php5.3版本开发环境源代码

    在继承链中,PHP5.3引入了晚期静态绑定,允许子类调用父类的静态方法时,使用子类的类型来解析静态属性。这是对早期静态绑定的一种改进,提高了代码的灵活性和可扩展性。 4. **魔术常量(Magic Constants)** ...

    php5.3,5.4,5.6,版本

    标题提及的“php5.3,5.4,5.6”是PHP的三个重要版本,每个版本都有其特定的特性和改进,下面将分别对这三个版本进行详细的阐述。 **PHP 5.3 版本** PHP 5.3在2009年发布,引入了许多新特性,旨在提高开发效率和代码...

    PHP5.3 参考手册

    这份手册包含了PHP5.3的所有核心特性、函数、类库以及语言结构,旨在帮助程序员提升效率,解决实际编程中遇到的问题。 PHP5.3版本在PHP的历史上具有里程碑意义,它引入了许多新的特性和改进,这些内容在手册中都有...

    php5.3 linux版

    7. **更好的类型检查**:PHP5.3开始引入弱类型检查,允许在变量声明时指定类型,如`int $var`,但仍然保留了PHP的动态类型特性。 8. **新的函数和常量**:PHP5.3增加了许多新函数,如`array_key_exists()`用于检查...

    php_apc-3.1.10-5.3-vc9-x86.rar

    这可能表明,尽管标题提到的是PHP 5.3,但描述中提及的是5.0,这可能是因为两者是兼容的,或者是一个错误。 标签 "php_apc3110" 是对APC扩展的简短标识,便于管理和搜索。 在压缩包内的文件名称列表中,我们只有一...

    wanmp php5.3

    3. 将PHP5.3添加到PATH环境变量中,以便在命令行中执行PHP脚本。 4. 在WampServer的控制台中管理PHP扩展,根据需求启用或禁用。 5. 使用提供的菜单或快捷方式轻松启动、停止服务器,以及切换在线/离线状态。 6. 在...

    PHP5.3中新增的魔术常量__DIR__

    这些常量的名字通常由两个下划线(__)开头,使得它们在普通变量中脱颖而出。在PHP 5.3版本中,为了方便开发者获取脚本所在的目录,引入了一个新的魔术常量——`__DIR__`。 在此之前,如果开发者想要获取当前执行的...

    php5.3 不用安装vs可用

    标题 "php5.3 不用安装vs可用" 暗示了这个PHP版本是与Visual Studio(VS)的特定版本兼容的,而不需要用户安装完整的Visual Studio环境。在描述中提到“vc6不是vc9不用安装vs2008”,这进一步说明了PHP 5.3.1是基于...

    php5.3 注意事项说明

    在PHP 5.3版本中,引入了一些重要的新特性,这些改变显著地提升了该语言的灵活性和功能性。以下是对这些特性的详细说明: 1. **支持命名空间(Namespace)** 在PHP 5.3之前,组织代码时,类名可能会产生冲突,特别...

    PHP5.3 MySQL5.1 CSS 3.3 JavaScript参考手册

    3. 闭包(Closures):PHP5.3支持匿名函数,也称为闭包,可以作为参数传递、存储在变量中或返回。 4.晚期静态绑定(Late Static Bindings):解决了静态方法调用时的动态上下文问题,使得继承链中的静态方法调用更加...

    详解PHP后期静态绑定分析与应用

    - 局部静态变量:在函数内部,`static`关键字用于创建只存在于该函数作用域内的静态变量,即使函数结束,其值也不会丢失。 - 静态类成员:静态属性和方法不需要实例化对象就能直接访问。静态属性不能通过实例对象...

    IIS+FastCGI+PHP5.3+MySQL5.1+Gzip详细教程

    3. 将PHP目录下的php-cgi.exe添加到系统的PATH环境变量中。 4. 在IIS中添加FastCGI处理模块,可以通过“Web平台安装程序”来实现,或者手动配置FastCGI设置。 5. 配置IIS站点,将PHP文件的默认处理程序映射为FastCGI...

    浅析php变量修饰符static的使用

    // 在PHP5.3及以上版本允许,$c在静态变量中被初始化 static $e = $c; } ``` 静态变量的使用范围仅限于其声明所在的局部作用域内,它不能被外部访问或修改,这就保证了数据的安全性。静态变量通常用于保存私有...

    php-5.3.27-win32-vc9-x86

    标签 "php5.3" 显示这个版本是 PHP 5.3 系列的一部分,意味着它可能不包含 PHP 5.4 及更高版本中的某些新功能,但对那些需要向后兼容旧代码或服务器环境的用户来说,是个可靠的选择。 压缩包子文件 ...

    php_xdebug-2.1.2-5.3-vc6.dll

    PHP 5.3是一个重要的里程碑,引入了许多新特性,如晚期静态绑定、命名空间、闭包等,这对提升代码的组织性和可维护性起到了关键作用。而"vc6"部分指的是该dll文件是基于Visual C++ 6编译器构建的,这通常与Windows...

    php-5.3.20.tar.gz

    其次,PHP 5.3.20支持晚期静态绑定(Late Static Binding),这是一种特殊类型的静态调用,它解决了静态方法在多层继承链中调用时的实际类问题。这使得静态方法能够更好地适应继承体系,提高了代码的灵活性。 此外...

Global site tag (gtag.js) - Google Analytics