PHP abstract 抽象类定义与用法示例

1. 什么是抽象类?

抽象类是一种不能够被实例化的类,它只能作为其他类的基类被继承。

在PHP中,抽象类通常被用于定义一些基础的方法和属性,它们被认为是抽象的,因为它们没有具体的实现。

以下是抽象类的定义方式:

abstract class AbstractClass

{

// 抽象方法必须被子类实现

abstract protected function abstractMethod();

// 普通方法可以直接实现

public function normalMethod()

{

return "This is normal method.";

}

}

抽象类由abstract关键字来修饰,其中抽象方法必须被子类实现,而普通方法可以直接实现。

2. 抽象类的用法示例

抽象类通常被用于定义一些基础的方法和属性,然后让子类来实现这些方法和属性。

2.1 定义抽象类

以下是一个定义了抽象方法的抽象类:

abstract class Database

{

public $host = 'localhost';

public $port = '3306';

public $user = 'root';

public $pass = 'root';

public $dbname = 'test';

abstract public function query($sql);

abstract public function fetchAll($result);

}

这个类定义了一些基础的属性和两个抽象方法:query和fetchAll。

2.2 子类继承抽象类

以下是一个继承了上面定义的抽象类的子类:

class Mysql extends Database

{

private $link = null;

public function __construct()

{

$this->link = mysqli_connect($this->host . ':' . $this->port, $this->user, $this->pass, $this->dbname);

if (!$this->link) {

throw new Exception(mysqli_connect_error());

}

}

public function query($sql)

{

$result = mysqli_query($this->link, $sql);

if (!$result) {

throw new Exception(mysqli_error($this->link));

}

return $result;

}

public function fetchAll($result)

{

$rows = array();

while ($row = mysqli_fetch_assoc($result)) {

$rows[] = $row;

}

return $rows;

}

}

这个类继承了抽象类,并且实现了抽象类中定义的query和fetchAll方法。

2.3 使用子类对象操作数据库

以下是使用Mysql类对象来操作数据库的示例:

try {

$mysql = new Mysql();

$result = $mysql->query("SELECT * FROM test");

$rows = $mysql->fetchAll($result);

foreach ($rows as $row) {

echo "id: " . $row['id'] . ", name: " . $row['name'] . ", age: " . $row['age'] . "<br>\n";

}

} catch (Exception $e) {

echo $e->getMessage();

}

这个示例中,首先创建了一个Mysql对象,然后调用了它的query方法来查询数据库,并且调用fetchAll方法来获取查询结果。

3. 总结

抽象类是一种不能够被实例化的类,它通常被用于定义一些基础的方法和属性,然后让子类来实现这些方法和属性。在PHP中,抽象类由abstract关键字来修饰,并且抽象方法必须被子类实现。

后端开发标签