专注于WEB技术的IT博客

php面向对象之类的静态成员

时间:2013-04-15分类: php浏览:4229
分享到:

php面向对象中类的静态成员包括静态方法和静态属性.

静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量。


静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是什么。


类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据.

下面将通过一个实例来加深对静态成员的理解。

<?php
     class MyClass {              
          static $count=0;               //在类中声明一个静态成员属性count,用来统计对象被创建的次数
          function __construct() {      //每次创建一个对象就会自动调用一次这个构造方法
               self::$count ++;            //在类中使用self访问静态成员count,使其自增1
          }
          static function getCount() {  
               return self::$count ;   
          }
     }
     $MyClass=new MyClass();         //通过MyClass类创建第一个对象,在构造方法中将count累加1
    echo MyClass:: getCount().'<br/>'; //在类的外面使用类名来直接访问静态方法getCount()
    $MyClass2=new MyClass();
    echo MyClass:: getCount().'<br/>';
?>

程序运行结果:

1

2

上面的MyClass类的$count属性声明为static,静态成员$count在类中只保留一个变量值,而这个变量值对所有的实例都是有效的,也就是说,所有的实例共享这个成员,类似于全局变量,所以对$count值的任何改变都会反映到所有实例化对象中。需要注意的是$count应使用self关键字加上作用域限定符 (::)或者类名加上作用域限定符引用(MyClass::$count),而不是通过this和箭头操作符。因为静态成员是属于类的,而不属于对象,如果试图使用"$this->$count"的形式访问将会导致语法错误。


总结

1、类的静态成员使用static关键字来标识

2、不能在类中使用$this来引用静态成员属性和方法。

3、类中的静态成员是不需要对象而使用类名来直接访问

4、在类中,使用“self::"或者"类名::"来访问其它静态成员

5、在类的外部使用"类名 :: 类成员"形式静态地访问某个成员,不仅省略掉实例化类的代码,而且效率会更高




猜你喜欢
php面向对象之__autoload()
php面向对象之__call处理错误调用
php面向对象之__toString()
PHP面向对象之const常量修饰符
php面向对象之final的应用
php面向对象之克隆对象
PHP面向对象之对象和引用
php面向对象之子类中重载父类的方法
php面向对象的访问类型控制
php面向对象编程之类的继承性
标签 : php 面向对象
除非注明,本文首发网志博客,欢迎转载!转载请注明本文地址:http://w3note.com/web/101.html,谢谢。
  • 评论
  • 赞助本站