电子商务网站类型百度信息流账户搭建
抽象类和接口都是不能被实例化的特殊类,可以在抽象类和接口中保留公共的方法,将抽象类和接口作为公共的基类。
在 中,可以使用关键词 abstract 创建一个抽象类,语法格式如下:
abstract class class_name {
abstract public function func_name1(arg1, arg2);
abstract function func_name2(arg1, arg2, arg3);
}
对抽象类的几点说明:
一个抽象类必须至少包含一个抽象方法,抽象类中的方法不能被定义为私有的(private),因为抽象类中的方法需要被子类覆盖;同样抽象类中的方法也不能用 final 修饰,因为其需要被子类继承。
抽象类中的抽象方法不包含方法实体。
如果一个类中包含了一个抽象方法,那么这个类也必须声明为抽象类。
比如我们定义一个数据库抽象类,有很多种数据库,比如 、Oracle、MSSQL 等,虽然每种数据库都有不同的使用方法,但是对于数据库来说都有一些共同的操作部分,比如建立数据库链接、查询数据、关闭数据库链接等。这样我们就能抽象出可适用于不同数据库操作的抽象基类。
如下示例定义一个抽象 Database 类:
abstract class Database { abstract function connect($host,$username,$pwd,$db); abstract function query($sql); abstract function fetch(); abstract function close(); function test(){ echo 'test'; } }
下面定义一个 MySQL 类,继承自抽象基类 Database。
class mysql extends Database { protected $conn; protected $query; function connect($host,$username,$pwd,$db){ $this->conn = new mysqli($host,$username,$pwd,$db); } function query($sql){ return $this->conn->query($sql); } function fetch(){ return $this->query->fetch(); } function close(){ $this->conn->close(); } }
抽象类中的抽象方法必须被子类实现(除非该抽象类的子类也为抽象类),否则会报错;抽象类中的非抽象方法可不被子类实现(如示例中的 test() 方法)。非抽象方法必须包含实体,抽象方法不能包含实体。