
基礎(chǔ)入門
PHP是什么?
PHP(PHP: Hypertext Preprocessor,超文本預(yù)處理器的縮寫),是一種被廣泛應(yīng)用的開放源代碼的、基于服務(wù)器端的用于產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的、可嵌入HTML中的腳本程序語(yǔ)言,尤其適合 WEB 開發(fā)。
當(dāng)客戶端向服務(wù)器的程序提出請(qǐng)求時(shí),web服務(wù)器根據(jù)請(qǐng)求響應(yīng)對(duì)應(yīng)的頁(yè)面,當(dāng)頁(yè)面中含有php腳本時(shí),服務(wù)器會(huì)交給PHP解釋器進(jìn)行解釋執(zhí)行,將生成的html代碼再回傳給客戶端,客戶端的瀏覽器解釋html代碼,最終形成網(wǎng)頁(yè)格式的頁(yè)面。
執(zhí)行方式
PHP 代碼被包含在特殊的起始符和結(jié)束符中,使得網(wǎng)頁(yè)的腳本可以進(jìn)出“PHP 模式”。其它用 C 或 Perl 語(yǔ)言寫的腳本,需要用大量的命令來(lái)編寫程序以輸出 HTML ,而用PHP 編寫一個(gè) HTML 腳本,只需嵌入了一些代碼來(lái)完成操作(例如,在本例中輸出了一些文本)。和客戶端的 JavaScript 不同的是,PHP 代碼是運(yùn)行在服務(wù)端的。如果在服務(wù)器上建立了如上例類似的代碼,則在運(yùn)行該腳本后,客戶端就能接收到其結(jié)果,但他們無(wú)法得知其背后的代碼是如何運(yùn)作的。甚至可以將 web 服務(wù)器設(shè)置成讓 PHP 來(lái)處理所有的 HTML 文件,這么一來(lái),用戶就無(wú)法得知服務(wù)端到底做了什么。
PHP運(yùn)行環(huán)境安裝
大家在初始學(xué)習(xí)PHP時(shí)使用集成化開發(fā)環(huán)境是最好的選擇,下面是常用的集成開發(fā)環(huán)境
| 集成開發(fā)軟件 | 可使用的操作系統(tǒng) | 說(shuō)明 |
|---|---|---|
| WAMP | Win | 推薦 |
| XAMPP | Win/Mac | |
| Mamp | Mac | 推薦 |
| Lamp | Linux(CentOS/Fedora/Debian/Ubuntu) |
PHP的特點(diǎn)
- 是開放源代碼的,服務(wù)器端的腳本語(yǔ)言。
- 獨(dú)立于操作系統(tǒng),可以運(yùn)行在幾乎所有系統(tǒng)中。
- 支持大部分的服務(wù)器,如Apache,IIS。
- 支持大量的數(shù)據(jù)庫(kù),主要是Access\MySQL\SQL Server這三種。
- 可以創(chuàng)建圖象。
- … …
- 還有一些其他特色功能在后面的高級(jí)技術(shù)詳細(xì)介紹。
- 我們知道的網(wǎng)站如迅雷、新浪微博等大型網(wǎng)站都在使用PHP程序。
C/S與B/S結(jié)構(gòu)
C/S結(jié)構(gòu)
C/S (Client/Server)結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu)
B/S****結(jié)構(gòu)
B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過(guò)WWW瀏覽器來(lái)實(shí)現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn)。這樣就大大簡(jiǎn)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶的總體成本。
集成開發(fā)環(huán)境
WAMP
Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一組常用來(lái)搭建動(dòng)態(tài)網(wǎng)站或者服務(wù)器的開源軟件,本身都是各自獨(dú)立的程序,但是因?yàn)槌1环旁谝黄鹗褂茫瑩碛辛嗽絹?lái)越高的兼容度,共同組成了一個(gè)強(qiáng)大的Web應(yīng)用程序平臺(tái)。
MAMP
蘋果系統(tǒng)下MAMP PRO是專業(yè)級(jí)版本的經(jīng)典本地服務(wù)器環(huán)境的os x軟件。MAMP這幾個(gè)首字母代表蘋果的OSX系統(tǒng)上的Macintosh、Apache、MySQL和PHP,顧名思義,你應(yīng)該知道MAMP的強(qiáng)大功能 啦!MAMP 內(nèi)含 Apache 伺服器、PHP 安裝套件以及MySQL安裝套件。
PHP的標(biāo)記風(fēng)格
<?php … … ?>
這是PHP推薦使用的標(biāo)記風(fēng)格。服務(wù)器管理員不能禁用這種風(fēng)格的標(biāo)記。
分號(hào)
PHP用分號(hào)來(lái)分隔簡(jiǎn)單的語(yǔ)句。復(fù)合語(yǔ)句用大括號(hào)來(lái)標(biāo)記代碼塊,如條件測(cè)試或循環(huán),在大括號(hào)后面不要用分號(hào)。和其他語(yǔ)言不一樣的是,在PHP中右括號(hào)(?>)前的分號(hào)不是必選的。
空白和換行符
一般來(lái)說(shuō),空白符在PHP中無(wú)關(guān)緊要。可以將一個(gè)語(yǔ)句展開成任意行,或者將語(yǔ)句緊縮在一行。
可以利用這個(gè)靈活的格式來(lái)使代碼更具有可讀性(通過(guò)排列分配、縮進(jìn)等)。一些懶惰的程序員利用這種自由的格式創(chuàng)建根本無(wú)法閱讀的代碼,這是不提倡的。
程序的注釋
PHP支持C、C++和Shell腳本風(fēng)格的注釋,如下:
// 單行注釋
/* ...*/ 多行注釋 (注意:不能嵌套)
# 腳本注釋
查看數(shù)據(jù)
echo
輸出一個(gè)或多個(gè)變量,他不是函數(shù),不需要使用括號(hào),如果輸出多個(gè)請(qǐng)用逗號(hào)分隔
echo 1,2,3,4;
var_dump
打印變量的相關(guān)信息
var_dump(1234);
區(qū)別:echo 是直接輸出,var_dump輸出和帶有變量類型
變量知識(shí)
定義變量
PHP是弱類型語(yǔ)言,不像其他語(yǔ)言需要對(duì)變量進(jìn)行類型聲明。PHP中以 $ 作為前綴來(lái)定義變量,以a~z(大小寫)或 _ 下劃線定義變量名。
下面是合法的變量名
$pf = 'pfinal.com';
$_name = 'PFinal社區(qū)';
下面是非法的變量聲明
$999 = 'yahoo.com'
$&* = 'sina.com.cn'
弱類型
PHP是一種非常弱的類型語(yǔ)言。在大多數(shù)編程語(yǔ)言中,變量只能保持一種類型的數(shù)據(jù),而且這個(gè)類型必須在使用變量前聲明,例如C語(yǔ)言中。
而在PHP中,變量的類型通常不是由程序員設(shè)定的,確切地說(shuō),是根據(jù)該變量使用的上下文在運(yùn)行時(shí)(即變量的值)決定的。
簡(jiǎn)單來(lái)說(shuō),var = 1;就是數(shù)字,var2 = '1'就是字符串,變量類型是由值決定的。
傳值與引用
傳值賦值
直接使用 = 將變量的值賦值給另一個(gè)變量。
$a = 1;
$b = $a;
$b = 2;
echo $a;//結(jié)果是1
引用賦值
將一個(gè)變量的內(nèi)存地址賦值給另一個(gè)變量的行為即傳址賦值。需要在 = 等號(hào)前加上 & 引用符號(hào),這樣兩個(gè)變量指向內(nèi)存中的一個(gè)地址,任何一個(gè)變量的改變都影響到另一個(gè)變量,有點(diǎn)類似于快捷方式的概念。
$a = 1;
$b = &$a;
$b = 2;
echo $a;//結(jié)果是2
可變變量
可以變量即使用一個(gè)變量的值,作為另一個(gè)變量名。
$a = 'hello'; //普通變量
$$a = 'world'; //可變變量 相當(dāng)于:$hello = ‘world’;
echo "$a ${$a}";//輸出:hello world
echo "$a $hello";//輸出:hello world
變量作用域
變量作用域指變量在代碼中可以訪問(wèn)的位置。
超全局變量
可以代碼的任何位置都可以訪問(wèn)的變量
| 變量 | 說(shuō)明 |
|---|---|
| $_GET | 地址欄GET提交 |
| $_POST | 表單POST提交 |
| $_FILES | 文件上傳變量 |
| $_SESSION | 會(huì)話變量 |
| $_COOKIE | cookie值變量 |
| $_GLOBALS | 全局變量 |
| $_REQUEST | 包含$_GET、$_POST、$_COOKIE |
| $_SERVER | 服務(wù)器環(huán)境變量 |
全局變量
全局聲明(函數(shù)外聲明)的變量會(huì)保存在 $_GLOBALS 中,函數(shù)內(nèi)默認(rèn)不能訪問(wèn)到全局變量,在函數(shù)中訪問(wèn)需要使用 global 關(guān)鍵字。
$pf='PFinal社區(qū)';
function p() {
//利? global 引入全局變量
global $pf;
echo $pf;
}
p();
也可以使用全局?jǐn)?shù)組$GLOBALS調(diào)?用全局變量量。 如: $GLOBALS['hd'];
檢測(cè)變量
通過(guò)isset 函數(shù)可以檢測(cè)變量是否定義。
var_dump(isset($name));
# 結(jié)果是false
變量銷毀
php在全部代碼執(zhí)行結(jié)束后會(huì)刪除所有變量,也使用 unset 函數(shù)可以在程序運(yùn)行中刪除變量。
$name='pfinalClub.com';
unset($name);
全局變量不能在函數(shù)中刪除
$name = 'pfinalClub.com';
function run()
{
global $name;
unset($name);
}
run();
echo $name;
# 依然可以輸出 pfinalClub.com