小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
您的位置:首页 > 后端编程 > PHP > PHP基础

PHP的方法修饰符static、final、abstract

分类: PHP基础36个赞

拓展阅读:PHP的访问修饰符;public,private,protected修饰符


PHP除了访问修饰符外,还有方法修饰符

方法修饰符有三种,static、final、abstract


一、static【静态的】


1. static修饰的属性叫静态属性、static修饰的方法叫静态方法

2. 静态成员加载类的时候分配空间,程序执行完毕后销毁 

3. 静态成员在内存中就一份。

4. 静态修饰调用语法    

类名::属性    
类名::方法名()

案例1:静态方法

<?php
class Person {
    public static $add='北京';    // 修饰符之间没有顺序
    static public function show() {
        echo '这是一个静态的方法<br>';
    }
}
echo Person::$add,'<br>';     //北京
Person::show();                 //这是一个静态的方法

案例2:统计在线人数

<?php
class Student {
    private static $num=0;  //静态变量,在内存中就一份
    public function __construct() {
        self::$num++;      //self表示所在类的类名
    }
    public function __destruct() {
        self::$num--;
    }
    public function show() {
        echo '总人数是:'.self::$num,'<br>';
    }
}
//测试
$stu1=new Student;
$stu2=new Student;
$stu3=new Student;
$stu2->show();           //总人数是:3
unset($stu2);
$stu3->show();           //总人数是:2

注意:self表示所在类的类名,使用self降低耦合性


静态成员也可以被继承

<?php
class Person {
    public static $add='中国';
    public static function show() {
        echo '这是人类<br>';
    }
}
//继承
class Student extends Person {  
}
//测试
echo Student::$add,'<br>';        //中国   通过子类名称访问父类的静态成员
Student::show();                //这是人类

拓展阅读:PHP类的继承


静态延时绑定

static也可表示当前对象所属的类

<?php
class Person {
    public static $type='人类';
    public function show1() {
        //var_dump($this);      //object(Student)#1 (0) { } 
        //echo self::$type,'<br>';    //人类
        echo static::$type,'<br>';            //学生   延时绑定
    }
}
class Student extends Person {
    public static $type='学生';
    public function show2() {
        //var_dump($this);      //object(Student)#1 (0) { } 
        //echo self::$type,'<br>';    //学生
        echo static::$type,'<br>';            //学生
    }
}
//测试
$obj=new Student();
$obj->show1();
$obj->show2();
//结果
//学生 学生 
//static表示当前对象所属的类


static方法修饰符小结:

1、static在内存中就一份,在类加载的时候分配空间

2、如果有多个修饰符,修饰符之间是没有顺序的

3、self表示所在类的类名

4、static表示当前对象所属的类

5、static有两个作用,第一表示静态的,第二表示类名



二、 final【最终的】

final修饰的方法不能被重写

final修饰的类不能被继承


final修饰符不能被重写和继承

final的作用

1、如果一个类确定不被继承,一个方法确定不会被重写,用final修饰可以提高执行效率。

2、如果一个方法不允许被其他类重写,可以用final修饰。


三、abstract【抽象的】

abstract修饰的方法是抽象方法,修饰的类是抽象类

只有方法的声明没有方法的实现称为抽象方法

一个类中只要有一个方法是抽象方法,这个类必须是抽象类。

抽象类的特点是不能被实例化

子类继承了抽象类,就必须重新实现父类的所有的抽象方法,否则不允许实例化

类中没有抽象方法也可以声明成抽象类,用来阻止类的实例化


案例:

<?php
//抽象类
abstract class Person {
    public abstract function setInfo(); //抽象方法
    public function getInfo() {
        echo '获取信息<br>';
    }
}
//继承
class Student extends Person {
    //重写实现父类的抽象方法
    public function setInfo() {
        echo '重新实现父类的抽象方法<br>';
    }
}
//测试
$stu=new Student;
$stu->setInfo();     //重新实现父类的抽象方法
$stu->getInfo();     //获取信息


抽象类的作用:

1定义命名规范

抽象类的作用

2、阻止实例化,如果一个类中所有的方法都是静态方法,这时候没有必要去实例化,可以通过abstract来阻止来的实例化。

小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP的方法修饰符static、final、abstract