PHP OOP-抽象

时间:2020-02-23 14:42:02  来源:igfitidea点击:

在本教程中,我们将学习有关PHP中的抽象的知识。

什么是抽象?

在OOP中,抽象是一个概念,其中类具有没有实现的方法。
这个想法是要有一个模板,并让继承父类的子类实现该方法。

如何创建抽象方法?

当我们想创建一个抽象方法时,我们在方法名称前使用关键字"抽象"。
如果一个类有一个抽象方法,那么我们还要在该类之前添加abstract关键字。

在下面的示例中,我们有一个抽象方法foo(),因此我们向该类添加了abstract关键字。

abstract class Sample {
	
	//abstract method
	public abstract function foo();

}

创建抽象类时,实际上是在创建模板。

我们无法实例化一个抽象类

由于抽象类只是一个没有完全实现的方法的模板,因此不允许创建其对象。

//abstract class
abstract class Sample {
	
}

//this will give error - can't create object of an abstract class
$obj = new Sample();

抽象类可以具有完全实现的方法

允许在抽象类中具有完全实现的方法。
在下面的示例中,我们有一个抽象类Sample,带有一个抽象方法foo()和完全实现的方法hello()。

//abstract class
abstract class Sample {
	
	//abstract method
	public abstract function foo();

	//method
	public function hello() {
		printf("Hello World!");
	}

}

继承一个抽象类

当子类继承抽象类时,父类的抽象方法必须在子类中实现。

如果子类未实现父类的抽象方法,则必须将子类声明为抽象。

子类实现抽象方法

在下面的示例中,我们有一个抽象的父类" Sample",具有一个抽象方法" foo()"和" add()"。
我们有一个子类Po,它扩展了父类Sample并实现了抽象方法foo()和add()。

//abstract parent class
abstract class Sample {
	
	//abstract method
	public abstract function foo();

	public abstract function add($x, $y);

}

//child class
class Po extends Sample {
	
	//implementing abstract methods of parent class

	public function foo() {
		printf("Hello World!");
	}

	public function add($x, $y) {
		return ($x + $y);
	}

}

//create object of the Po class
$obj = new Po();

$obj->foo();	//this will print "Hello World!"

$sum = $obj->add(10, 20);	//this will return 30

printf("Sum = %d", $sum);	//this will print "Sum = 30"

子类未实现抽象方法

子类不必实现父类的抽象方法。

如果子类未实现父类的抽象方法,则必须将子类声明为抽象。

在下面的示例中,我们有一个具有抽象方法foo()和hello()的父类Sample。
我们有一个子类Po,它扩展了父类,只实现了抽象方法hello(),没有实现抽象方法foo()。

由于子类Po具有一个未实现的抽象方法foo(),因此我们必须将类Po声明为抽象类。

//abstract parent class
abstract class Sample {
	
	//abstract method
	public abstract function foo();

	public abstract function hello();
}

/**
 * child class Po set to abstract
 * as it is not implementing the abstract method foo()
 */
abstract class Po extends Sample {
	
	//implemented method
	public function hello() {
		printf("Hello World!");
	}

}