前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP-方法修饰符

PHP-方法修饰符

作者头像
cwl_java
发布2022-11-30 08:58:21
2480
发布2022-11-30 08:58:21
举报
文章被收录于专栏:cwl_Java

1.5 方法修饰符

方法修饰符有:static、final、abstract

1.5.1 static【静态的】
  1. static修饰的属性叫静态属性、static修饰的方法叫静态方法
  2. 静态成员加载类的时候分配空间,程序执行完毕后销毁
  3. 静态成员在内存中就一份。
  4. 调用语法 类名::属性 类名::方法名()
代码语言:javascript
复制
<?php
class Person {
	public static $add='北京';    // 修饰符之间没有顺序
	static public function show() {
		echo '这是一个静态的方法<br>';
	}
}
echo Person::$add,'<br>';		//北京
Person::show();					//这是一个静态的方法

练习:统计在线人数

代码语言:javascript
复制
<?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降低耦合性

静态成员也可以被继承

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

静态延时绑定

static表示当前对象所属的类

代码语言:javascript
复制
<?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();

小结:

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

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

3、self表示所在类的类名

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

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

1.5.2 final【最终的】

final修饰的方法不能被重写

final修饰的类不能被继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作用

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

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

1.5.3 abstract【抽象的】
  1. abstract修饰的方法是抽象方法,修饰的类是抽象类
  2. 只有方法的声明没有方法的实现称为抽象方法
  3. 一个类中只要有一个方法是抽象方法,这个类必须是抽象类。
  4. 抽象类的特点是不能被实例化
  5. 子类继承了抽象类,就必须重新实现父类的所有的抽象方法,否则不允许实例化
  6. 类中没有抽象方法也可以声明成抽象类,用来阻止类的实例化

例题

代码语言:javascript
复制
<?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来阻止来的实例化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.5 方法修饰符
    • 1.5.1 static【静态的】
      • 1.5.2 final【最终的】
        • 1.5.3 abstract【抽象的】
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档