1. 程式人生 > 實用技巧 >PHP語言基礎知識

PHP語言基礎知識

PHP語言基礎知識

目錄


前言

PHP是安全中需要掌握的一門語言,就這麼一點兒時間教網路安全,不可能精通,這裡就不要求你精通PHP,但是對於一些基礎程式碼能夠認識、能夠編寫那麼就可以了。

同時,這裡需要和HTML結合,如果你HTML還沒懂,那麼就需要加強一些HTML的技術能力了。值得一提的是,你看網頁中那麼多HTML程式碼,真的是人去寫的麼,那是不現實的,都是通過框架自動生成的,像現在的少兒程式設計不也是一樣麼。


第一章 PHP語言學習介紹

外文名PHP:Hypertext Preprocessor,中文名:“超文字前處理器”是一種通用開源指令碼語言。語法吸收了C語言、java和Perl的特點,利於學習,使用廣泛,主要適用於web開發領域。用PHP做出的動態頁面與其他的程式語言相比,PHP是將程式嵌入到HTML(標準通用標記語言下的一個應用)文件中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化程式碼執行,使程式碼執行更快。

1、目前PHP在全球網頁市場、手機網頁市場還有為手機提供API(程式介面)排名第一。
2、PHP入門簡單,學習入門易入手。

1.1 PHP部署安裝環境

PHP可以安裝的環境比較廣泛,可以在windows環境和Linux環境安裝部署,並且已經整合比較多環境包安裝。以下的這些全是各種環境包英文名,只不過代表的是不同整合環境包的名字,不用去深究。如下所示:

AppServ PHPstudy APMserv XAMPP WAMPServer …等等
對於我們才入門的學習者來說,選擇整合環境包的原則:
1、更新更快,版本較新
2、操作簡單易於上手
3、選擇項不要過多
因此,我們下面使用的整合環境包是:PHPstudy;當然,如果你對這塊比較熟悉了,也可以自行選擇整合環境包。
可以在官方網站下載:http://www.phpstudy.net/

1.2 PHP程式碼工具選擇

寫程式碼的工具有很多,對於剛開始學習PHP的朋友來說,選擇工具有幾個原則
1、不要使用帶自動提示的工具(例如eclipse、zend studio等PHP開發工具集)
2、寫完的程式碼必須要有顏色高亮顯示(不要使用txt文字編輯器等無程式碼顏色顯示的編輯器)
推薦的開發工具:
1)、sublime
2)、PHPstorm(推薦)
注:這兩個工具已經在開發環境資料夾中,直接使用即可,兩個工具的使用和配置,稍後寫在附錄文章中。

第二章 PHP程式碼基本語法

2.1 PHP函式知識介紹

新建test.php檔案,在這個test.php檔案中寫入如下程式碼:

<?php
phpinfo();
?>

你可以在瀏覽器位址列裡面,輸入你的伺服器地址。我們當前是以自己的電腦作為網頁伺服器使用的,可以在地址中輸入:

程式碼資訊解讀說明:

1、phpinfo是一個函式(功能),這個函式會顯示一個當前電腦(伺服器)的詳細的PHP資訊。
2、電腦是一個很笨的東西,需要我們人為的告訴他,程式碼寫完了。我們用分號(;)來告訴他程式碼寫完了。因此只要寫完一段程式碼,就需要在後面加分號。
3、而前後兩行的回車空行,是為了讓程式碼更加好看,避免疊在一起,看著不舒服。其實中間有多少個回車空行都沒有關係的,保證好看就行了。PHP的語法直譯器(PHP最核心部分)不會處理這些空行的。

程式碼編寫注意事項:

1、PHP的程式碼資訊全部要用半形的英文、很多人容易寫成全形的英文/中文和符號造成PHP程式碼報錯。
2、PHP程式碼的最後一行可以加也可不加分號。由於很多學習者特別是初學者經常犯一個毛病,寫完一行程式碼不加分號,因此容易犯錯,某些公司規定一行程式碼寫完,就必須加分號。
3、我們在寫檔案test.php這個檔案命名的時候,只要英文半形(a-z A-Z 0-9 _-)這些字元來命名檔案,檔案命名不要用中文,不要用特殊符號,不要中間加空格,嚴格區分大小。

2.2 PHP常量變數介紹

2.2.1 PHP變數知識:

在這個test01.php檔案中寫入如下程式碼:

<?php
$iphone7 = 5880;
$iphone7plus = 6088;
echo $iphone6 + $iphone7plus;  //echo是在PHP裡面最常用的一個輸出、顯示功能的命令
?>

$叫作美元符,英文單詞:dollar。PHP的變數必須以美元符開始。說明搞PHP有”錢”途。

變數的幾個特點介紹:

1、必須要以$開始,如變數x必須要寫成$x
2、變數的首字母不能以數字開始
3、變數的名字區分大小寫
4、變數不要用特殊符號、中文,_不算特殊符號
5、變數命名要有意義(別寫xxx,aaa,ccc)這種變數名

變數的分類情況說明:

可變變數,外部變數,環境變數

  1. 可變變數舉例說明
<?php
// 伺服器讀取的  編碼設定
    header('Content-type:text/html;charset=utf-8');
//定義了一個變數叫作$shu 將$shu這個變數的值設為字串的biao
$shu = ‘biao’;
//定義了一個變數叫作$biao 將他的值設定為滑鼠
$biao = ‘滑鼠’;
//$$shu就是可變變數;在已宣告的變數$shu前又加上了一個變數符
echo $$shu;
?>
  1. 外部變數舉例說明
    PHP的外部變數是PHP在使用過程中規定好的一些變數。這個變數的規定是這樣定的。
<html>
  <head>
  </head>
  <body>
<!-- 這一行method 對應的值改為post --->
<form action="req.php" method="post">
<input type="text" name="username"/>
<input type="password" name="pwd"/>
<input type="submit" name="提交"/>
</form>
  </body>
</html>

PHP程式碼呼叫以上HTML程式碼中的外部變數方法如下所示:

<?php
//$_POST[‘username’],將username作為字串放在中括號裡面,就得到了表單裡面的<input type=”text”name=”username”/>的值
$u = $_POST['username'];
echo $u.'<br />';
//$_POST[‘pwd’],將pwd作為字串放在中括號裡面,就得到了表單裡面的<input type=”text”name=”pwd”/>的值
$passwd = $_POST['pwd'];
echo $passwd.'<br />';
?>

通過上面的實驗我們知道了,通過$_POST這個外部變數,可以得到從表單輸入的值。另外我們總結一些外部變數,要求知識點的學習級別:瞭解含義,默寫這個單詞的寫法和作用。

  1. 環境變數舉例說明
    環境變數我們主要用的有$_SERVER和$_ENV兩個環境變數。不過,$_ENV逐漸被PHP的新版本給廢棄了。
<?php
phpinfo();
?>

其它環境變數:

2.2.2 PHP常量知識:

常量就是長久不變的值,常量在程式碼中的定義,以及書寫方式如下所示:

define(常量名, 常量值)

常量知識說明:

1、常量名可以小寫,但是通常大寫
2、常量名可以不加引號,但是通常加上引號
3、在字串中呼叫常量的時候,必須在引號外面
4、常量名建議只用字母和下劃線

<?php
define('MY_NAME','PHP中文網');
echo MY_NAME;
//下面是錯誤的呼叫方式
echo '我的名字是MY_NAME';
//下面是正確的呼叫方式
echo '我的名字是'.MY_NAME;
?>

?>此外,系統還為我們準備了一些內建的常量,這些常量都是規定好的,先熟悉幾個,還有更多的系統變數可以在入門以後擴充套件深入學習。

2.3 PHP註釋資訊介紹

所謂註釋,漢語解釋為註解,更為準確一些,因為程式碼是英文的,並且程式碼很長,時間長了人會忘了程式碼的意思作用,所以可以加上註釋進行說明提示。

註釋功能說明:

1、對重點進行標註
2、時間長了容易忘記程式碼,方便快速回憶,以及方便查詢資訊
3、可以讓其他人更容易看懂配置資訊
4、還可以生成文件,程式碼寫完相關的文件就寫完了,提高工作效率
5、擁有註釋、空行、回車之後的程式碼看起來更優美
6、註釋可用來排錯,不確定程式碼中哪一塊寫錯了,可以將一大段註釋,確定錯誤區域。
7、註釋中的部分的內容,電腦不會執行它

PHP註釋的方法如下所示:

  1. 單行註釋(只註釋一行)
//		表示單行註釋
#		表示單行註釋,用的比較少

單行註釋舉例演示:

<?php
//宣告非同步iphone7手機的價格變數
$iphone7 = 5880;
//顯示輸出收集價格
echo $iphone7; 
?>
  1. 多行註釋(註釋多行)
/*
多行註釋,這裡是註釋區域程式碼
*/

多行註釋舉例演示:

<?php
/*
作者:PHP中文網
時間:2020.01.01
功能:這是一個多行註釋例子
*/
?>

2.4 PHP資料型別介紹

資料型別就是對資料分類的一種劃分方式而已,例如以下舉例說明:
哺乳動物:人、貓、馬、鴨嘴獸…等等
蔬菜型別:西紅柿、菠菜、茄子…等等
水果型別:西瓜、桃子、蘋果…等等
PHP中一共有八種資料型別,包括4種標量資料型別:boolean(布林型別)、integer(整形)、float/double(浮點型)和string(字串型),2種複合資料型別:array(陣列型別)和object(物件型別),2中特殊的資料型別:resource(資源型別)與null(無/空白型別)。

2.4.1 整形資料型別

整形表示即為整數,英文稱之為integer,英文簡寫為int;整形分為8進位制、10進位制、16進位制,整形在計算機裡面是有最大值和最小值範圍的。大家經常聽說32位計算機,也就是32位計算機一次運算處理的最大範圍是-2的32次方到2的32次方-1;而64位計算機,就是一次運算處理的最大範圍是-2的64次方到2的64次方-1。

8進位制宣告方式:

<?php
//8進位制的取值範圍是0-7,即0、1、2、3、4、5、6、7
$bajinzhi=033145;
echo $bajinzhi;
?>
// 這裡僅僅是個說明,並不是八進位制的運算,具體看下面的圖

10進位制宣告方式:

<?php
//為了方便大家記憶和前期學習,英文不好的朋友可用拼音來宣告變數。
//宣告變數整數,英文int
$int=1000;
$zhengshu=1000;
echo $int;
echo $zhengshu;
?>
// 這裡僅僅是個說明,並不是十進位制的運算,具體看下面的圖

16進位制宣告方式:以0x開始,後面跟0-f的,0x的後面的abcdef不區分大小寫。(瞭解即可)

<?php
//16進位制的取值範圍是0-f,即0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
//宣告變數整數,英文int
$shiliujinzhi=0x6ff;
echo $shiliujinzhi;
// 這裡僅僅是個說明,並不是十六進位制的運算,具體看下面的圖
?>

2.4.2 布林資料型別

所謂布林型別,漢語翻譯過來之後,更好的解釋是用道家中易經的語言進行解釋,即為:陰/陽,男/女,真/假,對/錯,存在/不存在,0/1等等。

布林型別舉例說明:

<?php
//宣告一個變數(拼音)為布林
$buer=true;
//宣告一個變數(英文)
$bool=false;
?>

2.4.3 字串資料型別

在PHP語言中宣告字串有三種方式:
1、用單引號宣告
2、用雙引號宣告
3、用字界符宣告

單引號宣告

用英文半形的單引號,將字串包起來:

<?php
//宣告字串變數$zifu
$zifu='好好學習吧';
echo $zifu;
?>

雙引號宣告

在字串兩面加雙引號

<?php
//宣告字串變數$str
$str="我想好好學習";
echo $str;
?>

字界符宣告

1、在變數後面的等號寫三個小於號 <<<
2、然後在<<<後面寫上字元(建議英文大寫字元)
3、然後換行寫上任意想寫的字元
4、寫完後,頂行。在行最開始處,再寫上<<<後面的字元和分號。

<?php
$dingjie = <<<ABC
  如果
      非要在這個測試
    前
        面<br />
       加上一段
    <i>有趣的話</i>
    我想說,<h1>努力學習不好麼<h1>
ABC;
echo $dingjie
?>

那雙引號和單引號有什麼區別呢:

  1. 雙引號解析變數,但是單引號不解析變數
  2. 在雙引號裡面插入變數,變數後面如果有英文或中文字元,會把這個字元和變數拼起來,視為一整個變數。一定要在變數後面接上特殊字元,例如空格等分開。
  3. 如果在雙引號裡面插變數的時候,後面不想有空格,可以拿大括號將變數包起來。
  4. 雙引號解析轉義字元,單引號不解析轉義字元。但是單引號能解析\
  5. 單引號效率高於雙引號,儘可能使用單引號
  6. 雙引號和單引號可以互相巢狀,雙引號中可以插入單引號,單引號當中插入變數,這個變數會被解析。
  7. 神奇的字串拼接膠水——(.)點,用來拼接字串。
  8. 一般將定界符宣告字串視為雙引號一樣的功能來看待。

2.4.4 浮點型資料型別

所謂浮點型別,可以理解為,我們數學裡面的小數。宣告方式分為兩種:
1、普通宣告方式
2、科學宣告方式

普通宣告浮點數:

<?php
//宣告變數fudian的植為12121.3232
$fudian=12121.3232;
echo $fudian;
?>

科學宣告浮點數:

<?php
//宣告變數$f1的植為0.8873
$f1=0.8873;
var_dump($f1)
?>

var_dump() 函式用於輸出變數的相關資訊。顯示關於一個或多個表示式的結構資訊,包括表示式的型別與值。陣列將遞迴展開值,通過縮排顯示其結構。
參考資料:https://www.runoob.com/php/php-var_dump-function.html

2.4.5 PHP資料型別之檢視和判斷資料型別

檢視資料型別:
1、gettype(傳入一個變數)能獲得變數的型別
2、var_dump(傳入一個變數)輸出變數型別和值

<?php
//宣告一個變數88.8,可以自己多做幾次實現換成其他型別看看$type輸出是多少。
$float = 88.8;
$type = gettype($float);
echo $type;
?>

<?php
//多換幾個型別試試
$str = '你喜歡男人還是喜歡女人';
$type = var_dump($str);
echo $type;
?>

判斷資料型別方法:
使用is_*系列函式,is_types這一系列的函式,來進行判斷某個資料屬於哪種型別,如果是這個型別返回真,不是這個型別返回假。

<?php
//is_*系列函式有個特點,就是如果是這個型別的返回的值為真,不是這個資料型別就返回的是假
//宣告型別為假
$fo = false;
if (is_bool($fo)) {
    echo '執行真區間';
}else{
    echo '執行假區間';
}
echo "<br />";

//檢查未宣告的變數$p是否為空,為空就執行真區間
if(is_null($p)) {
echo '執行真區間';
}else{
echo '執行假區間';
}
echo "<br />";

//字串型別的數值,檢查執行的真還是假
$str = '18.8';
if(is_numeric($str)) {
echo '執行真區間';
}else{
echo '執行假區間';
}
echo "<br />";

//把sca的值換為整數 浮點 布林和字串試試
$sca = true;
if(is_scalar($sca)) {
echo '執行真區間';
}else{
echo '執行假區間';
}
echo "<br />";

//換成echo,is_int試試,為什麼echo執行假區間呢?
if(is_callable('var_dump')) {
echo '執行真區間';
}else{
echo '執行假區間';
}
echo "<br />";
?>

2.5 PHP流程控制語句

<?php
//我們定義一個泡到美女的變數($pao)為true,意思為泡到了
$pao =fales;
if($pao){
    echo '林志玲,我愛死你了';
    echo '我願意去死';
}else{
    echo '照騙,愛會消失的';
    echo '我不願意去死';
}
?>

2.6 PHP算數運算方法

算數運算子,就是小學所學過的大多數知識:

<?php
$x=5;
$y=6;
//5+6為11
echo $x+$y;
?>

2.6.1 PHP程式自加自減運算

自加自減運算就是把自己加1或者減1。如果學習過其它變成語言。會發現,此處的用法又是計算機裡面的一個規定。可以這樣用,用起來更加簡潔。

上面的用法說明其實很簡單,按照上面的例子,分成步驟去按過程判斷即可:

<?php
$x=5;
//先賦值後做加法運算,即將$x的值賦值為$y.$x的值為5,所以將$x的值賦值為$y.$y也是5
$y=$x++;
echo $y;
//$x的結果輸出為6,因為賦值給$y後,$x自己又把自己進行了+1操作。所以,$x結果為6
echo $x;
?>

2.6.2 PHP程式比較運算子號

比較運算子,在大家小學的時候就學了很多

<?php
$x=5;
$y=6;
//因為5大於6不成立,所以為錯的,即為false執行了假區間
if(!$x > $y){
    echo '變數x大於變數y 成立';
}else{
    echo '變數x大於變數y 不成立';
}
?>

2.6.3 PHP程式邏輯運算子號

邏輯運算子號比較簡單,是我們人類進行邏輯思考時的一種方式。

<?php
$x=true;
$y=false;
//邏輯與(並且),要求兩個都為true才能執行真區間,所以程式碼中執行假區間
if($x && $y) {
    echo '執行了真區間';
}else{
    echo '執行了假區間';
}
?>

2.6.4 PHP程式位運算

<?php
//$x二進位制為:
$x=5;
//$y二進位制為:
$y=8;
//結果為13
echo $x ^ $y;
?>

2.6.5 PHP三元運算符合其它運算子

三元運算子,相當於是if..else結構,不過三元運算子的寫法更加簡潔,語法格式如下:

<?php
$x=true;
$x?$y=5:$y=6;
//輸出5
echo $y;
?>

<?php
echo '<pre>';
echo ipconfig;
echo '</pre>';
?>

第三章 PHP流程控制語句

3.1 if條件控制語句

比如:郝斌同學是無趣的人。他回家時候做的事如下所示:
如果半夜回家,先去睡覺
如果早上回家,先去洗澡
如果中午回家,先去吃法
如果晚上回家,先去燒水
下面來了解下他的活動安排PHP語法規則:

<?php
If(判斷語句1){
   執行語句體1
}elseif(判斷語句2){
   執行語句體2
} elseif(判斷語句n){
   執行語句體n
}else{
   最後的else語句可選
}

流程程式碼資訊示例01:

<?php
$week=date("4");
//判斷星期小於6,則輸出: 還沒到週末,繼續上班....
if($week<"6"){
    echo "還沒到週末,繼續上班....";
}

流程程式碼資訊示例02:

<?php
//定義一個隨機變數,判定時間,隨機0點至23點
$dida = rand(0,23);
echo "當前時間為 $dida 點\n";
if($dida > 6 && $dida < 10 ){
    echo '睡覺';
}elseif ($dida > 10 && $dida < 14){
    echo '洗澡';
}elseif($dida >= 19 && $dida < 22){
    echo '燒水';
}elseif($dida > 22 && $dida <=23){
    echo '看電視';
}elseif($dida >=1 && $dida <3){
    echo '看電影';
}else{
    echo '工作';
}
?>

3.2 if巢狀語句

比如:王總在出行計劃和工作專案中具有極高的規劃性,他給自己的生活祕書和工作祕書分別指派了出差的行程:
生活上:先查天氣,下雨帶雨具和毛巾,不下雨要帶防晒霜,雨具、毛巾和防晒霜的情況要提前檢查,如果沒有要及時購買。
工作上:要提前溝通出差的工作任務,準備好了要及時檢查確認,列印簽單。沒有及時準備好的情況下,要列出主要的專案議題。

類似於上面的這種情況判斷,就需要用到if…else if…else反覆巢狀的結構了.
在if語句中可以巢狀一個或多個if語句,以實現多個引數的判斷,這就是if語句的多種巢狀.

巢狀結構如下所示:

<?php
if(判斷1){
  if(判斷2){
    程式碼段1;
}else{
    程式碼段2;
}
}else{
  if(判斷3){
    程式碼段3;
}else{
    程式碼段4;
}
}
?>

流程程式碼資訊示例01:

<?php
//0表示工作祕書,1表示生活祕書
//用程式碼模擬隨機產生當前的行程安排是生活祕書負責還是工作祕書負責
$mishu=rand(0,1);
if($mishu){
    //下雨和不下雨的狀態,隨機產生;下雨狀態為1,不下雨狀態為0
    $xiayu=rand(0,1);
    if($xiayu){
        //是否購買雨傘;購買了雨傘為1,未購買雨傘為0
        $you=rand(0,1);
        if($you){
            echo '下雨天,已經購買雨傘';
        }else{
            echo '下雨天,需要購買雨傘';
        }
    }else{
        //是否購買了防晒霜,購買了為1,未購買為0
        $you=rand(0,1);
        if($you){
            echo '未下雨,已經購買了防晒霜';
        }else{
            echo '未下雨,需要購買防晒霜';
        }
    }
}else{
    //是否準備好了會議議程,準備好了為1,未準備好為0
    $yicheng=rand(0,1);
    if($yicheng){
        echo '已準備好,可以隨時出發';
    }else{
        echo '沒有準備好,需要列印,延遲出發';
    }
}

3.3 switch語句使用

比如:王同學家裡特別有錢,所以他的行程方式和正常人的有些不一樣.
他的出行方式有以下6種方式:
司機開車/民航/自己家的專機/火車動車/騎馬/遊輪
switch…case的語法結構如下:

<?php
switch(變數){    //字串,整形
   case 具體值1:
      執行程式碼1;
      break;
   case 具體值2:
      執行程式碼2;
      break;
   case 具體值3:
      執行程式碼3;
      break;
      defult:
}
?>

上面的break是可選的,上面的default也是可選的,不要在case後面寫成分號,後面是冒號.不要在case後面寫判斷區間,如($foo >20 或者 $foo == 30)
Switch裡面的變數最好是整形 字串 因為布林判斷更適合if..else.

<?php
//定義出行工具
$tool=rand(1,6);
switch($tool){
    case 1:
        echo '司機開車';
        break;
    case 2:
        echo '民航';
        break;
    case 3:
        echo '自己家的專機';
        break;
    case 4:
        echo '火車動車';
        break;
    case 5:
        echo '騎馬';
        break;
    case 6:
        echo '遊輪';
        break;
}

3.4 while迴圈語句說明

比如:王總需要反覆往返於北京和大連,就是典型的迴圈結構.假設王總投資這個專案需要往返大連100次,每次訪問都會計數一次.難道寫一百遍同樣的程式碼?顯然對於智商極高的程式設計師來說不可能這樣處理。

需要抽象人類的思維邏輯,定義一個迴圈結構:

<?php
//定義需要往返的次數,老外喜歡從0開始計數,所以系統也是從0開始
$count=0;
//while後面接布林值判斷,為真執行,為假停止
//$count小於100的時候執行,也就是$count為0至99的時候執行.
//如果$count不小於100了,迴圈停止執行後續的程式碼

//迴圈開始處
while($count < 100){
echo "這是王總第 $count 次出差 <br />";
//每次執行讓$count+1,這樣的話,就不會產生$count永遠小於100的情況了
$count++;
}
//迴圈結束
?>

對比說明do..while與while區別:

do..while與while的語法結構基本一樣,也是一個布林型迴圈,功能也基本一樣.
基本語法規定如下:

do{
   //程式碼框
}while(判斷)

do…while與while區別是,它們的值得檢查時機不同.
do…while不論while判斷是否成立,先執行一次程式碼框迴圈語句,保證會執行一次(表示式的真值在每次迴圈結束後檢查)
然而我們之前的while迴圈會檢查布林判斷區域,成立則執行,不成立則不執行.

<?php
$i=0;
do {
  echo $i;
}while($i >0);
?>

3.5 for迴圈語句

同學反覆往返於北京和大連,並且在本上記錄往返次數.在PHP中還有另外一種實現方式能夠實現同樣的計數.for迴圈是PHP中的一種計數型迴圈.它的語法比較靈活多變,這是一個必須掌握的知識點.

for(表示式1;表示式2;表示式3)
  需要執行的程式碼段;
}

1、表示式1是初始化賦值,可以同時賦值多個程式碼;
2、表示式2在每次迴圈開始前求值,如果值為true,則繼續迴圈,執行巢狀的迴圈語句,如果值為false,則終止迴圈.
3、表示式3在每次迴圈之後被求值.

<?php
for($i=1;$i<=10;$i++)
  echo ‘分手後第’.$i.’年, 我全都忘了你的樣子<br />’;
}
?>

3.6 goto迴圈語句

王同學每週往返,但有一個特例:專案失敗後或者集團臨時通知除外,就可以不再這麼每週往返了.

基本語法:

<?php
goto wan;
echo '天王蓋地虎';
wan:
echo '小雞燉蘑菇';
?>

基本編寫:

<?php
for ($i=0;$i<100;$i++){
    echo '第'.$i.'每週往返北京大連<br />';
    if($i == 17){
        goto end;
    }
}
end:
echo '集團公司要求停止此項';
?>

第四章 PHP函式基本語法

函式的英文叫做:function,而function的解釋項中有另外一個含義”功能”,函式就是功能,呼叫一個函式就是在呼叫一個功能.

自定義函式的語法規則,語法規範如下:

Function 函式名(引數名1=[值1], 引數名2=[值2] , 引數名n=[值n])
{
    函式中的功能體
    [return 返回值]
}

程式碼編寫示例:

<?php
function php_cn(){
    echo "好好學習";
}
php_cn();
php_cn();
?>

php_cn這個函式,是不是顯示出來了兩段: 好好學習.

函式備註說明:

  1. 函式名只能是字母,數字,下劃線的組合,並且之間不能包含空格,數字不能放在變數名首位.
  2. 函式名與變數命名規則一樣,但是不同的是,函式名不區分大小寫
  3. 函式體的引數若是定義了,未傳參,程式碼會報錯.
  4. 函式後的引數如果有預設值,引數可以不填,程式碼也不會報錯
  5. 函式後的引數可以寫多個
  6. 函式後如果有預設值和無預設值的引數,通常把無預設值的引數寫在最前面
  7. 函式體的變數與函式體外的變數沒有關係
  8. 函式體中若有return,return後的程式碼不執行.
  9. 函式執行完後,可把函式體內的值,帶到函式體外
  10. 函式的執行沒有順序關係,可以在定義外之前的位置呼叫

根據之前學習的全域性變數資訊,編寫頁面內容:

<html>
  <head>
     <title>網站頁面資訊</title>
  </head>
  <body>
<!-- 先用POST來做實驗,以後可以改為get -->
<form action="glob.php" method="post">
<input type="text" name="info"/>
<input type="submit" name="提交"/>
</form>
  </body>
</html>

編寫傳入引數的函式資訊:

<?php
function demo() {
    echo $_POST['info'];
}
demo();
?>

在實際開發中,常常需要把程式中的共用程式碼放到一個檔案中,使用這些程式碼的檔案只需要包含這個檔案即可.這種方法有助於提高程式碼的重用性,給程式碼的編寫與維護帶來很大的便利.在PHP中,有以下四種方法包含一個檔案:

include函式功能實踐:
建立一個functions.php檔案,裡面寫上兩個函式:

<?php
//functions-test-02檔案
function demo(){
    echo 'aaaa';
}
function test(){
    echo 'bbbb';
}
?>

在functions.php的同級目錄下,在建立一個user.php檔案把functions.php檔案包含進來.
這樣函式資訊就可以專門放在functions.php裡面,哪需要用到這些函式的時候,就從哪包含進來.

<?php
//user.php
include "function-test-02.php";
//可以直接呼叫
demo();
test();
?>

數學常用函式總結:

字串常用函式總結:

時間資訊函式總結:

<?php 
$mytime = getdate();
echo "年 :".$mytime['year']."\n";
echo "月 :".$mytime['mon']."\n";
echo "日 :".$mytime['mday']."\n";
echo "時 :".$mytime['hours']."\n";
echo "分 :".$mytime['minutes']."\n";
echo "秒 :".$mytime['seconds']."\n";
echo "一個小時中的第幾鍾 :".$mytime['minutes']."\n";
echo "這是一分鐘的第幾秒 :".$mytime['seconds']."\n";
echo "星期名稱 :".$mytime['weekday']."\n";
echo "月份名稱 :".$mytime['month']."\n";
echo "時間戳   :".$mytime[0]."\n";
?>

第五章 PHP陣列結構

陣列的英文是array,可以存入多個不同型別的資料,是一個複合資料型別。

案例:

<?php
$shu = array(1 , 1.5 , true ,'天王蓋地虎,小雞燉蘑菇');
echo '<pre>';
var_dump($shu);
echo '</pre>';
?>

在上例中,我們發現我們存入了:整型、浮點、布林、字串
注:上例中echo pre這個標籤的主要目的是為原樣輸出,格式展示的更好看,更清晰。
可以用var_dump()打印出來顯示看一下效果:
索引陣列的下標必須要從0開始嗎?
答:這個問題其實不然,索引陣列並不一定要從0開始。
那如何能夠不從0開始呢?
答:需要用到大家在上面學的一小塊知識喲。就是鍵值對應符。我們來動手寫。

<?php
$kele = array('只有不斷努力才能博得未來',10 => 'NoAlike', 'PHP中文網' , '去PHP中文網學PHP', 19 => '蘋果和梨子我都愛' , '橘子我最愛');
//列印顯示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>

5.1 for迴圈遍歷索引陣列

<?php
//宣告一個數組,值為1到10
$num = array(1,2,3,4,5,6,7,8,9,10);

//按照索引陣列的特點,下標從0開始。所以1的下標為0,10的下標為9
echo $num[0].'<br />';
echo $num[9].'<br />';

//我們可以得到陣列中元素的總個數,為10
echo count($num) .'<br />';

//遍歷這個索引陣列的話,我們就可以定義一個變數為$i
//$i 的值為0,從0開始
//可以設定一個迴圈條件為:$i 在下標的(9)最大值之內迴圈
for($i = 0 ; $i < count($num) ; $i++){
echo $num[$i].'<br />';
}
?>

通過上面的例子,我們就把陣列進行了迴圈。因為下標是從0開始的,定義$i=0 。每次迴圈的時候讓$i 加1 ,但是必須要小於10,因為陣列下標的最大值為9。

5.2 常用運算元組函式

這些函式,也是面試中基礎面試中最愛問到的問題。
補充函式:

例子:彈出陣列中的第一個元素

<?php
$mingren = array("test", "test1", "test2", "test3");
$dc = array_shift($mingren);
echo $dc .'<br />';
print_r($mingren);
?>

第六章 PHP正則表示式

正則表達是會在開發中經常看到,它主要用在以下一些地方:匹配郵箱、手機號碼、驗證碼、替換敏感的關鍵詞。例如:涉及政治和罵人的話

PHP的正則表達示定界符的規定如下:定界符,不能用a-zA-Z0-9\ 其他的都可以用。必須成對出現,有開始就有結束。

舉例說明正則符號的定義方式:

例子						說明
/中間寫正則/				正確
$中間寫正則$				正確
%中間寫正則%			    正確
^中間寫正則^			    正確
@中間寫正則@			    正確
(中間寫正則)				錯誤  /\//
A中間寫正則A			    錯誤

注:\ 是轉義字元,如果在以後正則表達示裡面需要匹配/,如下:

/ / /

這個時候真要匹配/ 的時候,需要把定界符裡面的/ 用轉義字元轉義一下,寫成下面的例子:

/ \/ /

如果你覺得麻煩,遇到這種需要轉義的字元的時候可以把兩個正斜線(/ /)定界,改為其他的定界符(# #)。

正則表示式格式:preg_match ( string $正則 , string $字串 , array&$結果] )

功能:根據$正則變數,匹配$字串變數。如果存在則返回匹配的個數,把匹配到的結果放到$結果變數裡。如果沒有匹配到結果返回0。

<?php
$zz = '/wq/';
$string = 'ssssswqaaaaaa';
if(preg_match($zz, $string, $matches)){
   echo '匹配到了,結果為:';
   var_dump($matches);
}else{
   echo '沒有匹配到';
}
?>

我們常用的正則函式有:

第七章 PHP檔案系統管理

我們會點滑鼠右鍵刪除檔案、會control+c(或右鍵)複製、貼上檔案,會新建一些檔案,檢測這個檔案是不是隻讀檔案。在電腦裡面進行的這些操作,在程式碼裡面如果能操作就好了。因為,如果有了這些操作。我們能做很多事情了:可不可以寫入修改配置檔案、是不是可以做PHP安裝的時候檢測檔案的許可權、是不是可以做生成Html檔案等等很多不同的操作,總之其他太多太多的地方用到了檔案操作。

7.1 fopen、fread、fclose操作讀取檔案

1、readfile讀取檔案函式

那如何讀取一個檔案呢?我們先學一個函式。

readfile ( string: $檔名)
功能:傳入一個檔案路徑,輸出一個檔案。

下面的這一段程式碼中,只要傳入檔名或者指定的檔案路徑就把檔案讀取出來了。

<?php
   //linux類的讀了方式
   readfile("/home/paul/test.txt");
   //windows類的讀取方式
   readfile("c:\\oldboy\oldboy\boot.ini");
?>
注意:上面的程式碼中windows的斜線是\斜線,可能會轉義掉一些字元。因此,我們寫的時候寫上兩個斜線。

2、file_get_contents開啟檔案函式

<?php
   $filename = 'NoAlike.txt';
   $filestring = file_get_contents($filename);
   echo $filestring;
?>

3、fopen、fread、fclose操作讀取檔案

上面file_get_contents開啟檔案的方式簡單、粗暴。

resource fopen	 	    ( string $檔名, string 模式)
string fread 			( resource $操作資源, int 讀取長度)
bool fclose 			( resource $操作資源 )

fopen的模式有下面幾個,我們來講一下fopen的模式:

<?php
   //你可以建立一個NoAlike.txt,以只讀模式開啟
   $fp = fopen('NoAlike.txt', "r");
   //var_dump()操作一下$fp看看效果,輸出的是不是隻有型別提示的是resource
   var_dump($fp);
?>

7.2 PHP建立和修改檔案內容

1、file_put_contents寫入檔案

先來學習第一種寫入檔案的方式:

file_put_contents ( string $檔案路徑, string $寫入資料)
功能:向指定的檔案當中寫入一個字串,如果檔案不存在則建立檔案。返回的是寫入的位元組長度

操作程式碼演示示例:

<?php
   $data = "在PHP中文網學好PHP,妹子票子不再話下!";
   $numbytes = file_put_contents('test.txt', $data);
   if($numbytes){
       echo '寫入成功,我們讀取看看結果試試:';
       echo file_get_contents('test.txt');
   }else{
       echo '寫入失敗或者沒有許可權,注意檢查';
   }
?>

2、fwrite配合fopen進行寫入操作

<?php
   $filename = 'test.txt';
   $fp= fopen($filename, "w");
   $len = fwrite($fp, '我是一隻來自北方的狼,卻在南方凍成了狗');
   fclose($fp);
   print $len .'位元組被寫入了\n';
?>
程式碼說明:
· 不論有沒有新建都會開啟檔案重新寫入
· 原有的檔案內容會被覆蓋掉
· 檔案不存在會建立

那我們來對比一下以下幾個模式的不同:

7.3 PHP建立臨時檔案

我們之前建立的檔案都是永久檔案,而建立臨時檔案在我們平時的專案開發中也非常有用,建立臨時檔案的好處:檔案操作完成後即刪除,不需要去維護這個檔案的刪除狀態。

<?php
   //建立了一個臨時檔案
   $handle = tmpfile();
   //向裡面寫入了資料
   $numbytes = fwrite($handle, '寫入臨時檔案');
   //關閉臨時檔案,檔案即被刪除
   fclose($handle);
   echo  '向臨時檔案中寫入了'.$numbytes . '個位元組';
?>

7.4 php移動、拷貝和刪除檔案

我們日常在處理檔案的時候,可以刪除檔案、重新命名檔案也可以也可複製檔案。

1、重新命名檔案:

rename($舊名,$新名);
功能:這個函式返回一個bool值,將舊的名字改為新的名字。

操作示例說明:

<?php
   //舊檔名
   $filename = 'test.txt';
   //新檔名
   $filename2 = $filename . '.old';
   //複製檔案
   rename($filename, $filename2);
?>

2、複製檔案

複製檔案,就相當於是克隆技術,將一個原來的東西再克隆成一個新的東西,兩個長得一模一樣。

copy(原始檔,目標檔案)
功能:將指定路徑的原始檔,複製一份到目標檔案的位置。

操作示例說明:

<?php
   //舊檔名
   $filename = 'copy.txt';
   //新檔名
   $filename2 = $filename . '_backup';
   //修改名字。
   copy($filename, $filename2);
?>
說明:會通過上面的例子,發現多出來了一個檔案。

3、刪除檔案

刪除檔案就是將指定路徑的一個檔案刪除,不過這個刪除是直接刪除。使用的是windows電腦,你在回收站看不到這個檔案,你只會發現這個檔案消失了。

unlink(指定路徑的檔案)

程式碼操作示例:

<?php
   $filename = 'test.txt';
   if (unlink($filename)) {
       echo  "刪除檔案成功 $filename!\n";
   } else {
       echo  "刪除 $filename 失敗!\n";
   }
?>

4、檢測檔案屬性函式

假設安裝介面的網址是:install.php,安裝的鎖檔案是install.lock。我們就可以檢測install.lock檔案是否存在。

<?php
if(file_exists('install.lock')){
   echo '已安裝,請不要再次進行安裝';
   exit;
}
?>

常用檔案屬性函式:

5、PHP目錄處理函式

php 目錄處理函式處理資料夾的基本思想如下:
1.讀取某個路徑的時候判斷是否是資料夾
2.是資料夾的話,開啟指定資料夾,返回檔案目錄的資源變數
3.使用readdir讀取一次目錄中的檔案,目錄指標向後偏移一次
4.使用readdir讀取到最後,沒有可讀的檔案返回false
5.關閉檔案目錄

我們來學習一比常用函式:


程式碼演示操作:

<?php
//設定開啟的目錄是D盤
$dir = "d:/";
//判斷是否是資料夾,是資料夾
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
      //讀取到最後返回false,停止迴圈
      while (($file = readdir($dh)) !== false) {
           echo "檔名為: $file : 檔案的型別是: " . filetype($dir . $file) . "<br />";
       }
       closedir($dh);
   }
}
?>

6、php 檔案許可權設定
chmod主要是修改檔案的的許可權

<?php
//修改linux系統/var/wwwroot/某檔案許可權為755
chmod("/var/wwwroot/index.html", 755);  
chmod("/var/wwwroot/index.html", "u+rwx,go+rx"); 
chmod("/somedir/somefile", 0755); 
?>

7、php檔案路徑函式

我們經常會遇到處理檔案路徑的情況。例如:
1.檔案字尾需要取出來
2.路徑需要取出名字不取目錄
3.只需要取出路徑名中的目錄路徑
4.或者把網址中的各個部份進行解析取得獨立值
5.甚至是自己組成一個url出來

很多地方都需要用路徑處理類的函式。把常用的路徑處理函式為大家做了標註,對著這個路徑處理函式進行處理即可:

程式碼示例說明:

<?php
$path_parts = pathinfo('d:/www/index.inc.php');
echo '檔案目錄名:'.$path_parts['dirname']."<br />";
echo '檔案全名:'.$path_parts['basename']."<br />";
echo '副檔名:'.$path_parts['extension']."<br />";
echo '不包含擴充套件的檔名:'.$path_parts['filename']."<br />"; 
?>

8、php實現檔案留言本

我們來看一下檔案結構:

index.php		展示輸入框和留言內容
write.php 		向message.txt寫入資料
message.txt 		存入聊天內容

編寫index.php檔案資訊:

<?php
//設定時區
date_default_timezone_set('PRC');
//讀了內容
@$string = file_get_contents('message.txt');
//如果$string 不為空的時候執行,也就是message.txt中有留言資料
if (!empty($string)) {
    //每一段留言有一個分格符,但是最後多出了一個&^。因此,我們要將&^刪掉
    $string = rtrim($string, '&^');
    //以&^切成陣列
    $arr = explode('&^', $string);
    //將留言內容讀取
    foreach ($arr as $value) {
        //將使用者名稱和內容分開
        list($username, $content, $time) = explode('$#', $value);
        echo '使用者名稱為<font color="gree">' . $username . '</font>內容為<font color="red">' . $content . '</font>時間為' . date('Y-m-d H:i:s', $time);
        echo '<hr />';
    }
}
?>
<h1>基於檔案的留言本演示</h1>
<form action="write.php" method="post">
    使用者名稱:<input type="text" name="username" /><br />
    留言內容:<textarea  name="content"></textarea><br />
    <input type="submit" value="提交" />
</form>

看了剛剛的展示內容,我們知道檔案儲存時:
1、段與段之間進行了分割
2、內容與使用者之前用一個特殊的符號進行了分割

下面我們來寫write.php寫入留言至檔案的程式碼:

<?php
//追加方式開啟檔案
$fp=fopen('message.txt','a');
//設定時間
$time=time();
//得到使用者名稱
$username=trim($_POST['username']);
//得到內容
$content=trim($_POST['content']);
//組合寫入的字串:內容和使用者之間分開,使用$#
//行與行之間分開,使用&^
$string=$username.'$#'.$content.'$#'.$time.'&^';
//寫入檔案
fwrite($fp,$string);
//關閉檔案
fclose($fp);
header('location:index.php');
?>

總結

以上便是在PHP的學習過程中需要掌握的一些基礎知識,沒有接觸過的朋友可能比較吃力,但是多花時間去練一練總是好的,然後多看看參考、一些案例,將PHP和HTML很好的結合,能夠熟練地運用更好。