類是面向對象程序設計的基本概念,通俗的理解類就是對現實中某一個種類的東西的抽象, 比如汽車可以抽象為一個類,汽車擁有名字、輪胎、速度、重量等屬性,可以有換擋、前進、后退等操作方法。
基本概念
面向對象編程(Object Oriented Programming, OOP, 面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP 達到了軟件工程的三個目標:重用性、靈活性和擴展性。
PHP 在 4.0 版本之后完善了對 OOP 的支持了。對于小型的應用,使用傳統的過程化編程可能更簡單也更有效率。然而對于大型的復雜應用時,OOP 就是一個不得不考慮的選擇。
類
類是具有相同屬性和服務的一組對象的集合。它為屬于該類的所有對象提供了統一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。
對象
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。
每個類的定義都以關鍵字 class
開頭,后面跟著類名,后面跟著一對花括號,里面包含有類的屬性與方法的定義。
類名可以是任何非 PHP 保留字的合法標簽。一個合法類名以字母或下劃線開頭,后面跟著若干字母,數字或下劃線。
一個類可以包含有屬于自己的常量,變量(稱為“屬性”)以及函數(稱為“方法”)。
小實踐
新建或編輯 index.php
,內容如下:
<?php
/**
* 類:任務
*/
class Task
{
// 屬性:任務描述
protected $description;
// 屬性:任務狀態
public $completed = false;
// 類的構造方法
function __construct($description)
{
$this->description = $description;
}
// 類方法:完成任務
public function complete()
{
$this->completed = true;
}
// 類方法:獲取任務的狀態
public function isComplete()
{
return $this->completed;
}
public function description()
{
return $this->description;
}
}
// 定義任務數據
$tasks = [
new Task('Go to the store'),
new Task('Finish my screencast'),
new Task('Clean my room')
];
$tasks[0]->complete();
require "index.view.php";
接下來建立文件 index.view.php
用于顯示任務信息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<ul>
<?php foreach ($tasks as $task) : ?>
<li>
<?php if ($task->completed) : ?>
<strike><?= $task->description(); ?></strike>
<?php else: ?>
<?= $task->description(); ?>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
以上的例子簡單描述如下:
我們建立一個待做事項的任務類 Task
,實例化了類的對象,并定義成了 $task
數組,通過數組獲取對象并調用類的方法 complete()
完成更改了任務狀態。之后,在頁面上循環打印了任務列表,判斷任務是否完成,如果完成的任務就通過 橫線(strike) 標記出來。