PHP面向对象的高级特性

一、静态属性和方法

1、static关键字用来声明静态属性和方法,与类有关,而不是某个特定的实例。
2、这类属性或方法也称为“类属性”或“类方法”。
3、静态属性和方法只能访问静态的属性和方法,不能访问类中非静态的属性和方法。
4、类外调用: 类名::静态属性名
5、类内调用: self::静态属性名

//定义一个基类
class Book{
	//类内
	//定义一个静态属性
	static public $readcount=0;
	//定义一个静态方法
	static public function read(){
	  //类内调用静态成员
	  self::$readcount++;
	}
}
//类外

//访问一个静态属性
echo Book::$readcount;//结果为0

//调用一个静态方法
Book::read();

//再次访问静态属性
echo Book::$readcount;//结果为1

二、final 类和方法

1、final关键字可以防止类的继承,final类不能有子类,final方法不能被覆写。
2、final方法不能被重写

//父类中定义一个final方法
final public function getPrice(){
	return $this->price;
}

//子类试图覆写父类的一个final方法
public function getPrice(){
	return 'The book price is '.$this->price;
}
//报错Fatal error: Cannot override final method Book::getPrice()

三、常量属性

1、使用const关键字定义常量属性,定义的这个常量不能被改变。
2、const定义的常量一般大写,不需要美元符号。
3、调用格式: 类名::常量名

//类内定义一个常量属性
const AUTHOR = 'wuhen';	

//类外访问一个常量属性
echo Book::AUTHOR;//结果为wuhen

四、抽象类和方法

1、使用abstract关键字来修饰一个类或者方法,称为抽象类或者抽象方法
2、抽象类不能直接被实例化
3、抽象类中只定义了子类需要的方法,抽象方法只有方法声明,没有方法体
4、抽象方法格式:abstract public function getName()
5、抽象方法必须被重写

//定义一个抽象类
abstract class Car{
	//定义一个抽象方法
	//抽象方法不能有方法体
	abstract public function move();

	//报错Fatal error: Abstract function Car::move1() cannot contain body
	// abstract public function move1(){};
}

//定义一个子类继承抽象类
class SmallCar extends Car{
	//必须实现抽象类中的所有抽象方法,否则报错
	public function move(){
		echo 'smallcar is move';
	}
}
//试图实例化一个抽象类
//报错Cannot instantiate abstract class Car 
$car = new Car();


五、接口

1、接口是一种类似于类的结构,可用于声明实现类所必须声明的方法,它只包含方法原型,不包含方法体
2、类全部为抽象方法,不需要声明abstract,这些方法原型必须被声明为public
3、声明接口使用interface 关键字
4、实现接口使用implements 关键字
5、实现接口的类必须实现接口中声明的所有方法,除非这个类为抽象类

//声明一个接口
interface Computer{
	//声明抽象方法,必须为public,且abstract不用声明
	public function start();
	public function shutdown();
}
interface Desk{
	public function area();
}

//声明一个类实现多个接口
class MultiDesk implements Computer,Desk{
	//必须实现所有的抽象方法
	public function start(){
		echo '电脑启动';
	}
	public function shutdown(){
		echo '电脑关机';
	}
	public function area(){
		echo '桌子的面积是2平米';
	}
}

//实例化一个对象
$multi = new MultiDesk();
$multi->start();//输出 电脑启动
$multi->shutdown();//输出 电脑关机
$multi->area();//输出 桌子的面积是2平米

我的小站

更多技术内容分享,更多有趣内容,那就请移步我的小站 [无痕小站]

猜你喜欢

转载自blog.csdn.net/kelinfeng16/article/details/82711554