zoukankan      html  css  js  c++  java
  • PHP面向对象之方法修饰符 (static final abstract)

    方法修饰符

    • 方法修饰符有
      • static
      • final
      • abstract

    static 静态的

    • 概念

      • static修饰的属性叫静态属性
      • static修饰的方法叫静态方法
      • 静态成员加载类的时候分配空间,程序执行完毕后销毁
      • 静态成员在内存中就一份
    • 调用语法

      • 类名::属性 类名::方法名()
    <?php 
    class Person {
    	public static $add='北京';    // 修饰符之间没有顺序
    	static public function show() {
    		echo '这是一个静态的方法<br>';
    	}
    }
    echo Person::$add,'<br>';		//北京
    Person::show();					    //这是一个静态的方法
    ?> 
    
    • 调用语法
      • self表示所在类的类名
      • 使用self降低耦合性
    <?php 
    class Student {
    	private static $num=0;	
    	public function __construct() {
    		self::$num++;      
    	}
    	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
    ?> 
    
    • 通过子类名称访问父类的静态成员
      • 静态成员也可以被继承
    <?php 
    class Person {
    	public static $add='中国';
    	public static function show() {
    		echo '这是人类<br>';
    	}
    }
    class Student extends Person {	
      //继承
    }
    //测试
    echo Student::$add,'<br>';		//中国   
    Student::show();				      //这是人类
    ?> 
    
    • 静态延时绑定
      • static表示当前对象所属的类
      • 优先子集获取属性
    <?php 
    class Person {
    	public static $type='人类';
    	public function show1() {
    		echo self::$type,'<br>';	      //人类
    		echo static::$type,'<br>';		  //学生   延时绑定
    	}
    }
    class Student extends Person {
    	public static $type='学生';
    	public function show2() {
    		echo self::$type,'<br>';	    //学生
    		echo static::$type,'<br>';	  //学生
    	}
    }
    //测试
    $obj= new Student();
    $obj->show1();
    echo '<br>';
    $obj->show2();
    ?> 
    
    • 小结
      • static在内存中就一份,在类加载的时候分配空间
      • 如果有多个修饰符,修饰符之间是没有顺序的
      • self表示所在类的类名
      • static表示当前对象所属的类名
      • static有两个作用,第一表示静态的,第二表示类名

    final 最终的

    • 语法

      • final修饰的方法不能被重写
      • final修饰的类不能被继承
    • 作用

      • 如果一个类确定不被继承,一个方法确定不会被重写,用final修饰可以提高执行效率
      • 如果一个方法不允许被其他类重写,可以用final修饰

    abstract 抽象的

    • 概念

      • 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();		//获取信息
    ?> 
    
  • 相关阅读:
    error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?
    linux命令awk的详解
    Ubuntu 能PING IP但不能PING主机域名的解决方法
    从github checkout子文件夹
    zuul简单使用
    docker for windows 10 添加阿里云镜像仓库无效问题
    Spring Boot 进行Bean Validate和Method Validate
    JVM调优-GC参数
    Spring Aop: 关于继承和execution target this @annotation
    ReentrantLock原理
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14117095.html
Copyright © 2011-2022 走看看