LOADING STUFF...

php面向对象全攻略 (十) final static const关键字的使用

技术教程5小时前更新 北陌
12 0 0

php面向对象全攻略 (十) final static const关键字的使用

14.final 关键字的应用

这个关键字只能用来定义类和定义方法,不能使用final 这个关键字来定义成员属性,因

为final 是常量的意思,我们在PHP 里定义常量使用的是define()函数,所以不能使用final 来

定义成员属性。

使用final 关键标记的类不能被继承;

代码片段

final class Person{

… …

}

class Student extends Person{

}

会出现下面错误:

Fatal error: Class Student may not inherit from final class (Person)

使用final 关键标记的方法不能被子类覆盖,是最终版本;

代码片段

class Person{

final function say() {

}

}

class Student extends Person{

function say() {

}

}

会出现下面错误:

Fatal error: Cannot override final method Person::say()

15.static 和const 关键字的使用

Static 关键字是在类中描述成员属性和成员方法是静态的;静态的成员好处在那里呢?

前面我们声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”

的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都

有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都

有一个国家的属性是“中国”其它的属性是不同的,如果我们把“国家”的属性做成静态的

成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属性,

static 成员能够限制外部的访问,因为static 的成员是属于类的,是不属于任何对象实例,是

在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程

度对类该成员形成保护;

从内存的角度我们来分析一下,内存从逻辑上被分为四段,其中对象是放在“堆内存”里

面,对象的引用被放到了“栈内存”里,而静态成员则放到了“初始化静态段”,在类第一次

被加载的时候放入的,可以让堆内存里面的每个对象所共享,如下图;

类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样

的,类似于全局函数。

代码片段

class Person{

//下面是人的静态成员属性

public static $myCountry=”中国”;

// var $name; //人的名子

//这是人的静态成员方法

public static function say(){

echo “我是中国人”;

}

}

//输出静态属性

echo Person::$myCountry;

//访问静态方法

Person::say();

//重新给静态属性赋值

Person::$myCountry=”美国”;

echo Person::$myCountry;

?

© 版权声明

相关文章

暂无评论

暂无评论...