4.1 静态方法和属性-深入PHP面向对象.模式与实践
By admin
- One minute read - 64 words摘自: 深入PHP面向对象.模式与实践 第四章 高级特性 4.1 静态方法和属性 第2章的所有例子使用的都是对象.我们把类当作生成对象的模板,把对象作为活动组件,对象的方法可以被调用,对象的属性可以被访问.之前的例子也暗示了,面向对象编程中的实际操都是通过类的实例(而不是类本身)完成的.毕竟类仅仅是对象的模板.
事实并非如此简单.我们不仅可以通过对象访问方法和属性,还可以通过类来访问它们.这样的方法和属性属性是”静态的”(static),必须用static关键字来声明.
class StaticExample{ static public $sNum = 0; static public function sayHello) { print “hello”; } }
========================================== 注解:static关键字是在php5中引入的,在php4程序中不能使用.
静态方法是以类作为作用域的函数.静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性.如果修改了一个静态属性,那么这个类的所有实例都能访问到这个新值.
因为是通过类而不是实例来访问静态元素,所以访问静态元素时不需要引用对象的变量,而是使用::(两个冒号)来连接类名和属性或类名和方法.
print StaticExample::$aNum; StaticExample::sayHello();
在第3章中,我们已经熟悉了这个语法.我们曾使用::和parent来访问覆写的方法.现在和之前一样,只不过访问的是类而不是对象数据.一个子类可以使用parent关键字来访问父类,而不使用其类名.要从当前类(不是子类)中访问静态方法和属性,可以使用self关键字.self指向当前类,就像伪变量 $this指向当前对象一样.因此,在StaticExample类的外部可以使用其类名访问属性$aNum属性:
StaticExample::$aNum;
而在StaticExample类内部,可以使用self关键字:
class StaticExample { static public $aNum = 0; static public function sayHello() { self::$aNum++; printf “hello(” . self::$aNum . “)n”; } }
根据定义,我们不能在对象中调用静态方法,因此不能在静态方法中使用伪变量$this.
那么,我们为什么要使用静态方法或属性呢?
因为静态元素有很多有用的特性. 1.首先,它们在代码中的任何地方都可用(前提假设你可以访问该类).也就是说,你不需要在对象间传递类的实例,也不需要将实例存放在全局变量中,就可以访问类中的方法. 2.其次,类的每个实例都可以访问类中定义的静态属性,所以你可以利用静态属性来设置值,该值可以被类的所有对象使用. 3.最后,不需要实例对象就能访问静态属性或方法,这样我们就不用为了获取一个简单的功能而实例化对象.
相关文章: