【Day 23】PHP?蛤?一隻大象?

PHP?蛤?一隻大象?

PHP?蛤?一隻大象?

在 C 語言的戰場上,我曾經被指標這個最終 Boss 打得落花流水,只能無奈退場。那段日子裡,我幾乎放下程式,只偶爾靠寫些遊戲腳本來刷一點存在感。

直到大學時期,我重新踏上程式這條路,而這次迎接我的,不再是讓我頭痛的指標,來了一位新的夥伴 —— PHP: Hypertext Preprocessor(PHP:超文本預處理器)。

為什麼會突然又接觸程式語言呢?

因為當初選擇了資訊管理系,而此系畢業條件之一就是 「專題製作」 ,說實話,剛聽到的時候,心理壓力很大,畢竟要獨立做出一個完整作品,聽起來就不是件簡單的事。

但在接觸到 PHP 課程時,我發現做 Web Application(網頁應用程式) 不僅有趣,還能立即看到畫面變化,對當時的我來說特別新鮮。

當時有一門叫做「程式語言設計」的大一必修課。授課老師相當嚴格,但不得不說,他的教學非常扎實,也正是他,成為了把我正式帶入程式設計世界的啟蒙老師。

「來!今天我們要上的課叫做『網頁程式設計』,在這門課裡,大家要用一個程式語言來完成一個簡單的網頁應用程式。」老師一邊說一邊在白板上寫下那幾個字母:PHP,以及它的全名。

你可能會想:「大學電腦課的你,應該還是在打遊戲吧?」抱歉,這次你猜錯了。因為大學開始後我很快就發現 —— 在電腦課偷打遊戲,輸的可不只是分數,還可能是未來。
所以我乖乖收起遊戲,開始認真聽課,不然就等著被當掉 QQ。

Note
大學的必修課程如果被當掉的話,就必須要花時間、金錢重修,而且也會延後畢業時間。

「大家先安裝 XAMPP,因為我們接下來要用 Apache 伺服器來執行 PHP 程式碼。」老師邊操作邊解說。

「XAMPP 是一個跨平台的網頁伺服器套件,裡面包含了 Apache、MySQL、PHP 和 Perl 等組件。」

接著他又說:「再打開 phpDesigner 8,這是一個專門用來編輯 PHP 程式碼的開發工具。」

對我來說,這是第一次接觸專門的 IDE,畢竟以前寫程式時都還在用 Notepad++ 或純文字編輯器(有點年代感)。

最後老師示範:「現在我們來寫一個簡單的 PHP 程式,讓它在瀏覽器輸出 Hello, World!。」

1
2
3
<?php
echo "Hello, World!";
?>

不得不說,當時我真的覺得這沒什麼特別的,畢竟之前寫過 C 語言的 printf ,所以覺得 PHP 的 echo 其實跟 printf 沒啥差別,但真正讓我眼睛一亮的,是老師接下來的介紹。

「PHP 是一種伺服器端的腳本語言,可以嵌入到 HTML 中,還能和資料庫互動。」老師一邊解說語法,一邊現場敲範例程式碼。

而我坐在台下心裡默默想著:
「咦?程式還能跟資料庫對話?這也太酷了吧!」

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第一個 PHP 程式</title>
</head>
<body>
<?php
$username = "admin";
$password = "password123";

$connection = mysqli_connect("localhost", $username, $password);
if ($connection) {
echo "<div>成功連接到 MySQL 資料庫!</div>";
} else {
echo "<div>無法連接到 MySQL 資料庫!</div>";
}

mysqli_close($connection);
?>
</body>
</html>

「這段程式碼會連接到 MySQL 資料庫,並且輸出連接成功或失敗的訊息。」老師解釋道。

沒錯,這就是我第一次接觸 PHP 的契機,沒想到吧?
當時我覺得 PHP 超厲害,不只可以直接跟資料庫互動,還能嵌入到 HTML 中,重點是能即時把結果呈現在畫面上,甚至還能跟使用者互動。

相比之下,C 語言就顯得有些單調,頂多就是在黑底白字的視窗裡輸出幾行文字,完全沒有什麼成就感。

也因為這個契機,我決定請這位老師擔任我的專題指導老師,從那一刻起,我正式踏上了專題製作之路。

專題成品算是順利出爐,也拿到很好成績,甚至被系上點名想拿去當招生教材範本,但過程真的是滿滿血淚。

程式過程慘,但團隊合作更慘,我的組員們,擺爛、不合群、狀況外一堆,組員 5 人,但真正在做的只有 2 人(說真的,Debug 比吵架容易多了 XD)。

更別提那位嚴格到爆的指導老師,雖然把我磨得更強,可是壓力也大到快得心理陰影。

只能說 —— 專題結束時交出去的不只是作品,還有我的半條命 XD。

半條命

PHP 專為網頁設計而生的語言

PHP 本身就是為了網頁程式開發而設計的語言,對一般程式設計師來說,相對來講是很容易快速上手的,為什麼這麼說呢?

讓我們來看一下幾個基本的 PHP 語法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
// 宣告變數
$name = "Ray";
$age = 30;

// 輸出變數
echo "我的名字是 $name,我的年齡是 $age 歲。";

// 條件判斷
if ($age >= 18) {
echo "我已經成年了。";
} else {
echo "我還未成年。";
}

// 迴圈
for ($i = 0; $i < 5; $i++) {
echo "這是第 $i 次迴圈。";
}

// 陣列
$fruits = array("蘋果", "香蕉", "橘子");
foreach ($fruits as $fruit) {
echo "我喜歡吃 $fruit。";
}

// 函式
function greet($name) {
return "你好,$name!";
}
echo greet("Ray");

// 物件導向
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function introduce() {
return "我的名字是 $this->name,我的年齡是 $this->age 歲。";
}
}
$person = new Person("Ray", 30);
echo $person->introduce();

// 例外處理
try {
$result = 10 / 0; // 這會引發除以零
} catch (DivisionByZeroError $e) {
echo "錯誤:除以零!";
} finally {
echo "這是 finally 區塊,無論如何都會執行。";
}
?>

Note
DivisionByZeroError 是 PHP 7 之後才有的例外類別,早期版本會直接拋出 Warning。

如果你是從前一篇接著看到這篇,應該會發現 PHP 的語法相較於 C 語言真的容易理解,也相當直觀,而且在語法裡,你還能看出一些和其他語言相似的影子 —— 畢竟 PHP 本身就有參考 C、Perl、Java 等語言的設計,所以只要你曾經接觸過其他程式語言,基本上都能很快上手。

再加上 PHP 可以直接連接 MySQL 資料庫,這對於開發網頁應用程式來說是非常重要的功能。下面的範例則展示了較新式的 MySQLi 連接方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// 連接到 MySQL 資料庫
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "my_database";

$conn = new mysqli($servername, $username, $password, $dbname);

// 檢查連接是否成功
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}

// 執行 SQL 查詢
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// 輸出每一行資料
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "0 結果";
}
// 關閉連接
$conn->close();
?>

這段程式碼展示了如何連接到 MySQL 資料庫,並執行一個簡單的 SQL 查詢,然後輸出查詢結果。

前面也有示範過 PHP 也可以嵌入到 HTML 中,這讓 PHP 成為一個非常適合用來開發網頁應用程式的語言。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的第一個 PHP 網頁</title>
</head>
<body>
<h1>歡迎來到我的 PHP 網頁!</h1>
<p>這是一個簡單的 PHP 範例。</p>
<?php
echo "<p>今天的日期是 " . date("Y-m-d") . "。</p>";
?>
</body>
</html>

這段程式碼展示了如何在 HTML 中嵌入 PHP 程式碼,並輸出當前日期,這讓我們可以在網頁上動態地顯示內容,但這邊要強調一件事情,PHP 的副檔案名稱是 .php,而不是 .html,這是因為 PHP 程式碼需要在伺服器端執行編譯後,再將結果(HTML)傳送到瀏覽器。

所以早期的網頁開發在切換頁面時,都會有一段「空白」的瞬間閃爍畫面,這是因為當你送出了請求時,PHP 會需要將 .php 檔案中的 PHP 程式碼執行完畢,然後再將結果轉換成 HTML 傳送到瀏覽器,這個過程會有一點延遲。

這也是為什麼後來出現了 AJAX 技術,可以讓我們在不重新載入整個頁面的情況下,動態地更新網頁內容。

那麼大家可能都會好奇,為什麼 PHP 會如此流行與受歡迎,其中有幾個原因:

  1. 簡單易學: PHP 的語法相對簡單,容易上手,特別是對於初學者來說。
  2. 開源免費: PHP 是一個開源的語言,對於某些企業來講,他們不需要付費昂貴的授權費用就可以使用 PHP 來開發網頁應用程式。
  3. 強大的社群支持: PHP 擁有一個龐大的社群(至少以我認知中,這個社群是非常活躍的)。
  4. 本身就是為了網頁開發而設計: PHP 的設計初衷就是為了網頁開發,所以它有很多內建的功能可以直接使用,例如與資料庫的連接、處理表單等。

每個程式語言都有它的優缺點,PHP 也不意外,只是我認為…

「並不是 PHP 本身不好,而是太過於『容易被用的不好』。」

這是我對 PHP 的一個總結。

結語

前陣子回頭看了一下自己當初寫的專題,整個就是黑歷史,程式碼寫得亂七八糟,完全沒有結構可言,甚至還有一堆 SQL Injection 的漏洞,真的是慘不忍睹啊~~~

同步更新

本文將同步更新至以下網站: