php不会写 能看懂,人人都能看懂的全栈开发教程——PHP
既然我們是要實現(xiàn)從數(shù)據(jù)庫里讀取任務列表這個需求,那么首先我們就得知道如何通過編程的方式從數(shù)據(jù)庫里把數(shù)據(jù)讀出來。這里我們就選 PHP 作為我們的編程語言來實現(xiàn)我們的想法。
為什么是 PHP 呢?主要有以下兩個原因:
PHP 比較簡單,入門容易特別適合教學
全世界十個網(wǎng)站大概有八個都是 PHP 做的,所以市場還是有的
PHP 的歷史也很長了,年紀大意味著穩(wěn)定,但不一定意味著過時,PHP 最近一段時間還在新增功能,而且變化很快
當然作為『全棧』工程師,我們要接觸的語言是很多的,后面還會遇到,但當你接觸多了之后,就會發(fā)現(xiàn)語言跟語言之間還是有很多相通的地方,當你熟悉其中一個的時候,學起另外的就會快很多。
到目前為止我們已經(jīng)知道兩種語言了,HTML 和 SQL,只不過這倆語言是屬于只服務于自己專業(yè)領域的語言,比如 SQL 就是用來操作數(shù)據(jù)庫的,HTML 就是用來表示頁面數(shù)據(jù)的。而有些編程語言適用性就更廣一些,能解決各種各樣的問題,這種語言就叫做 General Programming Language,簡稱 GPL,PHP 將是我們了解到的第三個語言,也是第一個 GPL。
就好像 HTML 需要瀏覽器來執(zhí)行,SQL 需要通過 MySQL 來執(zhí)行一樣,PHP 也需要一個叫『PHP 解釋器』的軟件來執(zhí)行。在 Ubuntu 里我們可以很方便得安裝它
sudo apt install php-cli
# 我們也可以通過以下命令安裝,但會安裝很多我們用不到的組件,所以不太建議
sudo apt install php
提示安裝完畢之后,我們可以通過下面的命令確認一下:
php -v
如果安裝沒有問題,會提示 PHP 解釋器當前的版本。一般來說,PHP 的版本會顯示為 PHP 7 以上。對于目前的項目需求來說,PHP 7.0 就已經(jīng)足夠我們用了。
這里要說明一下,因為 PHP 操作 MySQL 服務是一個可選功能,可能默認是不會安裝的,所以我們要先檢查一下是否支持連 MySQL。PHP 是通過 pdo_mysql 模塊來連接 MySQL 的,我們可以通過下面的命令來查看 PHP 已經(jīng)加載的模塊(參數(shù) -m 即 modules 的意思)
php -m
不出意外應該會返回一堆默認被安裝的模塊的名稱,這些模塊都是干嘛的先不用去管,現(xiàn)在的重點只是確認 pdo_mysql 模塊在不在就行了。
這里順便跟大家分享一個 Linux 里的命令或者說工具叫 grep,基本上所有發(fā)行版安裝好都自帶的。它的作用就是查找某個文字流里有沒有出現(xiàn)某個指定的字符。最常見的文字流就是文件了,如果我想查找文件 index.html 里有沒有出現(xiàn) html 這個單詞,就可以通過以下命令快速知道結果:
grep html index.html
大家可以通過 grep --help,或者 man grep 命令(man 是 manual 的意思即手冊),或者就在網(wǎng)上查 grep 的所有用法,查多個文件,查某個目錄下所有文件,給關鍵詞加顏色(有些發(fā)行版默認就加了)等很多功能都是提供的。
通過 grep 這個特性,我們可以不用對著 PHP 返回的一堆模塊看瞎了眼。但問題是 grep 只能找文件,如何用在 PHP 返回的結果里呢?
答案是在 *nix 系統(tǒng)里,我們可以將文件理解成文字流輸入源,另外我們也可以通過『轉發(fā)』操作,也就是 |,將 A 程序的輸出,轉成 B 程序的輸入:
php -m|grep pdo_mysql
如果 PHP 加載了 pdo_mysql 模塊,就應該返回 pdo_mysql。
如果我們發(fā)現(xiàn) pdo_mysql 沒有安裝,那么我們可以通過下面的命令安裝就行
sudo apt install php-mysql
開始第一個 PHP 程序
不過且慢,我們先回到當前 Ubuntu 賬戶的 home 目錄
cd
Home 就是『家』這大家應該都知道,那么家之外就屬于公共環(huán)境了,就跟你不應該在公共環(huán)境放自己的家具一樣,我們也不應該在 home 之外的目錄亂放文件。
你可以通過下面的命令確認是否在自己的 home 目錄下:
pwd
pwd 就是 Print Working Directory 的意思,即打印當前的工作目錄,正常情況下,你現(xiàn)在應該在 /home/你的用戶名/ 這個目錄里。
mkdir 是 MaKe DIRectory 的意思,即創(chuàng)建文件夾,我們先給自己創(chuàng)建一個名叫 code 的文件夾,或者說目錄,當成我們的項目根目錄。當然你也可以自己起名字
mkdir code
為了確認是否創(chuàng)建目錄成功,我們可以通過『列文件(夾)』命令 ls (即 LiSt),列出當前目錄下都有啥
ls
ls 命令也有很多參數(shù),比如最常見的有 -l 即 long,沒錯,也就是更長(詳盡)的信息,這里就不展示了,可以自己試試。
在 Linux 里還有 alias 即『別名』這個概念,可以把一些命令取一個別名,一般來說都是把長命令變成短別名。有好多發(fā)行版會默認將 ls -l 命令添加別名為 ll,大家也可以嘗試一下自己的發(fā)行版是不是也是這樣的。另外大家也可以通過 alias 命令列出當前所有的別名,或者新增別名:
# 列出所有別名
alias
# 新增別名
alias llh='ls -lh'
非 PHP 的話題不再展開。我們先進入項目根目錄即 code 目錄,然后使用 touch 命令創(chuàng)建一個文件 index.php,接著用大家自己喜歡的編輯器打開它,當然為了演示方便,我這里就用 Ubuntu 自帶的,用起來跟 Windows 下記事本差不多的編輯器 gedit(實際上 gedit 功能要比 notepad 多多了)。
cd code
touch index.php
gedit index.php
我們在 gedit 里添加如下代碼:
Hello world
保存之后,切換會終端,并運行以下命令:
php index.php
如果你能看到 Hello world,恭喜,您的第一個 PHP 程序已經(jīng)能成功運行了。
是不是覺得,這什么玩意兒,我也沒寫啥啊?
我們再回到編輯器,將內容稍作添加:
Hello world
echo 'Bye world';
?>
再次回到終端運行腳本,返回的內容就是兩行 xxx world 了。
這里我們可以做一個小總結,在 PHP 代碼里,在 <?php和 ?>之間的代碼,是 PHP 解釋器要當作代碼來處理的,而在之外的代碼,PHP 解釋器只是原樣輸出。
接下來我們將跳過一般教材特別無聊的基本概念介紹,直接說如何從數(shù)據(jù)庫里讀取數(shù)據(jù),下面是從數(shù)據(jù)庫讀數(shù)據(jù)的代碼,切記不要跳過注釋
// 此為 PHP 里的注釋
/* 也可以這么寫注釋 */
// Pdo 是一個『類』,對一個類做 new 操作,會變成一個『對象』
$pdo = new Pdo('mysql:dbname=minetodo', 'root', '123456');
// 我們可以把 $pdo 理解成之前我們用的 mysql 客戶端,而 query 『方法』就跟在 mysql 客戶端里執(zhí)行 SQL 是一樣的意思。
$rows = $pdo->query('select * from task');
// 大家可以先猜猜 foreach 是什么意思
foreach ($rows as $row) {
// var_dump 『函數(shù)』,可以將某個『變量』里的數(shù)據(jù)格式詳細打印出來
var_dump($row);
}
// 如果后面不需要輸出別的內容,PHP 代碼關閉記號是可以省略不寫的,建議不寫,原因以后會說
這里我不會對什么是類,什么是函數(shù),什么是方法給你們總結,那都是我的總結,不是你們自己的,學習最好的方式依然是從例子中去感受。如果你就想看別人的總結,網(wǎng)上也有很多很多,這里就不重復重復再重復了。
這里我們先重點看這一行
$pdo = new Pdo('mysql:dbname=minetodo', 'root','123456');
是不是感覺跟用 mysql-client 鏈接 MySQL 服務的命令很類似?讓我們再回憶一下:
mysql -u root -p 123456
還記得我說如果沒有設置密碼,就不需要 -p 參數(shù)嗎?PHP 代碼是一樣的,如果沒設置密碼,就不用寫第三個參數(shù),直接這樣就行
$pdo = new Pdo('mysql:dbname=minetodo', 'root');
可能有些愛發(fā)問的小伙伴會問第一個參數(shù)為什么是那樣寫,我這里只先簡單介紹一下,PDO (即 PHP Data Objects,PHP 數(shù)據(jù)對象)不僅可以支持 MySQL,其他很多種類的數(shù)據(jù)庫都是支持的,比如之前提過的 SQLite,他也是支持的。它的第一個參數(shù)叫 DSN,即 Data Source Name,數(shù)據(jù)源名,DSN 包含了要連接的數(shù)據(jù)庫類型,以及數(shù)據(jù)庫地址等信息。比如例子里寫的就是『數(shù)據(jù)庫是 MySQL 類型,庫名,即 dbname,是 minetodo』。假如我們的數(shù)據(jù)庫是 SQLite 并且數(shù)據(jù)庫文件是 minetodo.db,我們也可以寫成
$pdo = new Pdo('sqlite:///minetodo.db');
注意上面例子連用戶名都去掉了,因為 SQLite 不需要用戶名(以及密碼)。
還記得我們的需求嗎?其中有一個需求是,在命令行下可以列出任務。在不知不覺中,我們已經(jīng)完成了這個一個需求:
php index.php
當然我們會發(fā)現(xiàn) var_dump 函數(shù)所打印出來的數(shù)據(jù)信息,過于詳細:
array(4) {
["content"]=>
string(15) "第一條任務"
[0]=>
string(15) "第一條任務"
["created_at"]=>
string(19) "2020-01-29 22:36:10"
[1]=>
string(19) "2020-01-29 22:36:10"
}
var_dump 告訴我們,$row 是一個數(shù)組(array),在 PHP 里,獲取數(shù)組中某個元素,可以通過以下方式,比如我們要獲取 content 字段:
$row['content']
所以我們可以將返回的內容做的更美觀一些,修改我們的 index.php 中 foreach 部分代碼:
foreach ($rows as $row) {
echo $row['content'], ' @ ', $row['created_at'], PHP_EOL;
}
小技巧:echo 若干字符串,并且用 , 隔開,等同于
echo $row['content'];
echo ' @ ';
echo $row['created_at'];
echo PHP_EOL;
最后的 PHP_EOL 是『常量』,常量可以自己創(chuàng)建,習慣全大寫,PHP 也自帶許多常量,比如 PHP_EOL 表示『回車符』。常量常用來表示一個永恒不變的值,比如圓周率,但 PHP_EOL 實際上會根據(jù)運行的環(huán)境不同而變化:*nix 下它是 \n,而 Windows 下它是 \r\n。
關于回車符多說幾句,在 *nix 里回車是一個字符 \n,而 Windows 下是兩個字符 \r\n,因為這個差別,經(jīng)常會出現(xiàn)以 Windows 為開發(fā)系統(tǒng)的工程師,在打開以 *nix 為開發(fā)系統(tǒng)的工程師發(fā)過來的文件后發(fā)現(xiàn)折行都沒了。或者反過來,*nix 工程師會發(fā)現(xiàn) Windows 工程師發(fā)過來的文件每行后面總是有亂碼。其實團隊成員在不同的操作系統(tǒng)下開發(fā)沒有問題,問題是大家不去統(tǒng)一代碼規(guī)范。實際上,大部分編輯器比如 gedit,都是可以設置行結尾字符是 *nix 風格還是 Windows 風格(有的寫作 MS-DOS 風格,畢竟在更早的 DOS 時代就已經(jīng)是這樣了),當然像 Windows 記事本這種功能實在太簡單,是不提供這種功能的,所以用 Windows 的同學最好還是換一個編輯器。
最終完整的代碼看這里。注意實例代碼是沒有 MySQL 密碼的,如果你設置了密碼需要自行加上。
寫作累,服務器還越來越貴
求分擔,祝愿好人一生平安
天使打賞人
總結
以上是生活随笔為你收集整理的php不会写 能看懂,人人都能看懂的全栈开发教程——PHP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有遗传病可以做泰国试管婴儿吗?
- 下一篇: 地下城与勇士变成甚么样了