常用关键字final、static、const、instanceof

2025-04-10 21:17:29

1、Final关键字的应用在PHP5中新增了final关键字,它可以加在类或类中方法前。但不能使用final标识成员属性,虽然final有常量的意思,但是在PHP中定义常量是使用define()函数来完成的。在类中将成员属性声明为常量也有专门的方式,final关键字作用如下.使用final标识的类,不能被继承 在类中使用final标识的成员方法,在子类中不能被覆盖。下面例子声明一个MyClass类并使用final关键字标识,MyClass类就是最终的版本。不能有子类,也就不能对它进行扩展。<?php Final class MyClass{ //声明一个类,并使用final关键字标识,使其不能有子类 //成员略}Class MyClass2 extends MyClass{//声明另一个类试图去继承final标识的类,结果出错//成员略}运行结果为:Fatal error:Class MyClass2 may not inherit from final class(My Class) //输出错误上例中,试图使用MyClass2类去继承用final标识的类MyClass时,系统报错。如果在类中的成员方法前加final关键字标识,则在子类中不能覆盖它,被final标识的方法也是最终版本。<?php //声明一个类MyClass作为父类,在类中声明一个成员方法 Class MyClass{ //声明一个成员方法并使用final标识,则不能再子类中覆盖 Final function fun(){ //方法体中的内容略}}//声明继承MyClass类的子类,在类中声明一个方法去覆盖父类中的方法Class MyClass2 extends MyClass{ //在子类中试图去覆盖父类中已被final标识的方法,结果出错 Function fun(){ //方法体中的内容}}该程序运行结果为:Fatal error:Cannot override final method MyClass::fun() //系统报错上面代码中声明一个MyClass类,并在类中声明一个成员方法fun(),在fun()方法前面使用final关键字标识。又声明一个MyClass2类去继承MyClass类,并在子类MyClass2中声明一个方法fun()试图去覆盖父类中已被final标识的fun()方法时,系统会出现报错信息

2、Static关键字的使用使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以吹涡皋陕用来标识成员方法。普通成语昂作为对象属性存在,已Person类为例,如果在Person类中有一个”$country=’china’”的成员属性,任何一个Person类的对象都会拥有自己的一份$country属性,对象之间不会干扰。而static成员是作为整个类的属性存在,如果将$country属性使用static关键字标识,则不管通过Person类创建多少个对象,这个static成员总是唯一存在的,在多个对象之间共享的。因为使用static标识的成员是属于类的,所以与对象实例和其他的类无关。类的静态属性非常类似于函数的全局变量。类中的静态成员是不需要对象而使用雷鸣来直接访问的,格式如下:类名::静态成员属性名; //在类的外部和成员方法中都可以使用这种方式访问静态成员属性类名::静态成员方法名(); //在类的外部和成员方法中都可以使用这种方式访问静态成员方法在类中声明的成员方法中,也可以使用关键字”self”来访问其他静态成员。因为静态成员是属于类的,而不属于任何对象,所以你不能用$this来引用它,而在PHP中给我们提供的self关键字,就是在类的成员方法中用来代表本类的关键字.格式如下:Self::静态成员属性名; //在类的成员方法中使用这种方式访问奔雷中的静态成员属性Self::静态成员方法名(); //在类的成员方法中使用这种方式访问本类中的静态成员方法如果在类的外部访问类中的静态成员,可以使用对象引用和使用类名访问,但通常选择使用类名来访问。如果在类内部的成员方法中访问其他的静态成员,通常使用self的形式去访问,最好不要直接使用类名称。在线面的例子中声明一个MyClass类,为了让类中的count属性可以在每个对象中共享,将其声明为static成员,用来统计通过MyClass类一共创建了多少对象。<?php //声明一个MyClass类,用来演示如何使用静态成员 Class MyClass{ Static $count; //在类中声明一个静态成员属性count,用来统计对象被创建的次数 Function __construct(){ //每次创建一个对象就会自动调用一次这个构造方法 Self::$count++; //使用self访问静态成员count,使其自增1;}Static function getCount(){ //声明一个静态方法,在类外面直接使用类名就可以调用 Return self::$count; //在方法中使用self访问静态成员并返回}}MyClass::$count = 0 //在类外面使用类名访问类中的静态成员,为其初始化赋值0$myc1 = new MyClass(); //通过MyClass类创建第一个对象,在构造方法中将count累加1$myc2 = new MyClass(); //通过MyClass类创建第一个对象,在构造方法中又为count累加1$myc3= new MyClass(); //通过MyClass类创建第一个对象,在构造方法中再次为count累加1Echo MyClass::getCount(); //在类外面使用类名访问类中的静态成员方法,获取静态属性的值3Echo $myc3->getCount(); //通过对象也可以访问类中的静态成员方法,获取静态属性的值3上例的MyClass类中,在构造方法内部和成员方法getCount()的内部,都使用self访问本累中使用static标识为静态的属性count,并在类的外部使用类名访问类中的静态属性。可以看到同一个类中的静态成员在每个对象中共享,每创建一个对象静态属性count就自增1,用来统计实例化对象的次数 另外在使用静态方法时需要注意,在静态方法中职能访问静态成员。因为非静态的成员必须通过对象的引用才能访问,通常是使用$this完成的。而静态的方法在对象不存在的情况下也可以直接使用类名来访问,没有对象也就没有$this引用,没有了$this引用就不能访问类中的非静态成员,但是可以使用类名或self在非静态方法中访问静态成员

3、Const关键字虽然const和static的功能不同。但使用的方法比较相似。在PHP中定义常量是通过调用define()函数来完成的,但要讲类中的成员属性定义为常量,则只能使用const关键字。将类中的成员属性使用const关键字标识为常量,其访问的方式和静态成员一样,都是通过类名或在成员方法中使用self关键字访问,也不能用对象来访问。标识为常量的属性是只读的,不能重新赋值,如果在程序中试图改变它的值,则会出现错误。所以在声明常量时一定要给初值,因为没有其他方式后期为常量赋值。注意,使用const声明的常量名称前不要使用”$”符号,而且常量名称通常都是大写的。在下面的示例中演示了类中如何声明常量,并在成员方法中使用self和在类外面通过类名来访问常量。<?php //声明一个MyClass类,在类中声明一个常量,和一个成员方法Class MyClass{ Const CONSTANT = “CONSTANT value”; //使用const声明一个常量,并直接赋上初始值 Function showConstant(){ //声明一个成员方法并在其内部访问本类中的常量 Echo self::CONSTANT,”<br>”; //使用self访问常量,注意常量前不要加”$”}}Echo MyClass::CONSTANT.”<br>”; //在类外部使用类名称访问常量,也不要加”$”$class = new MyClass(); //通过类MyClass创建一个对象$class$class->showConstant(); //调用对象中的方法//echo $class::CONSTANT; //通过对象名称访问常量是不允许的。

4、Instanceof关键字使用这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作。例如,假设希望了解名为$man的对象是否为类Person的实例:$man = new Person();If($man instanceof Person){ Echo “$man是Person类的实例对象”;}在这里有两点值得注意,首先,类名没有任何定界符,使用定界符将导致语法错误。其次,如果比较失败,脚本将推出执行。Instanceof关键字在同时处理多个对象时特别有用,例如,你可能要重复地调用某个函数,但希望根据对象类型调整函数的行为。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢