11-Ajax(二)PHP相關知識及語法介紹

PHP基礎

服務端web開發(fā)

  • 在講解什么是服務端開發(fā)之前,讓我們先思考幾個問題:

  • 網(wǎng)站訪問:當我們做好了.html的網(wǎng)站,如何讓別人(朋友,用戶)可以訪問到呢?

    • 使用U盤拷貝,QQ發(fā)送文件等直接將文件共享的方式?---不靈活;
    • 將網(wǎng)站放在服務器上,讓用戶通過網(wǎng)址訪問?---絕大多數(shù)網(wǎng)站的做法。
  • 網(wǎng)站內容更新:如果用戶每次訪問我們的網(wǎng)站看到的內容都是一樣的,在最初的新鮮勁過去以后估計就再也不想訪問我們的網(wǎng)站了o(╯□╰)o,那么如何去更新網(wǎng)站的內容呢?

    • 當有內容、圖片,或者界面需要更新時,直接修改.html文件?---費時費力;
    • 通過某種手段,當有新的消息,自動的完成網(wǎng)站的更新?---動態(tài)網(wǎng)站。
  • 如何實現(xiàn)網(wǎng)站動態(tài)化:網(wǎng)站的本質,其實就是一堆按照某種規(guī)則排列的字符串而已,如果我們可以通過某種方式,讓電腦動態(tài)生成這些字符串,是不是就實現(xiàn)了網(wǎng)站的動態(tài)化?

    • 想要讓電腦干事情,可以通過編程語言來實現(xiàn);
    • 編程語言的編寫位置為服務器,因為用戶是向服務器要網(wǎng)站的;
    • 在服務器,通過編程語言讓用戶訪問的網(wǎng)站動態(tài)化叫做:服務端web開發(fā)
    • web服務器:提供了web服務的計算機;請求的是HTML:讀取并返回、在服務端一般不會對這個html頁面進行任何操作;web后臺開發(fā):本質是動態(tài)生成html、css、js。
  • 可選開發(fā)方式:雖然基本上所有可以返回字符串的編程語言都能夠實現(xiàn)這個功能,目前市場主流開發(fā)語言有:Java、PHP、ASP、.Net、Ruby、Python、Erlang等。雖然可以選擇的開發(fā)語言有很多種,但是本質都是一樣的:

  • 當用戶訪問網(wǎng)站了,根據(jù)某些邏輯,生成對應的HTML、CSS、JS代碼給用戶。

PHP簡介

  • PHP在眾多的編程語言中,是比較容易上手,結合我們搭建的WAMP環(huán)境就能夠開始學習了。

  • PHP代碼執(zhí)行方式:服務端web編程寫好的代碼,需要通過瀏覽器訪問服務器,在服務器端執(zhí)行,然后返回給用戶結果,如果直接使用瀏覽器打開,就會解析為文本。

PHP常見語法

  • 這里只列舉常用的PHP語法,更為詳細的語法教程可以查閱:http://www.w3school.com.cn/php/index.asp

  • 注意點:

  • 必須放在服務器配置的網(wǎng)站目錄中;

  • 不要直接用sublime、webstorm運行;

  • 必須寫在<?php ?>標簽中;

  • 執(zhí)行的位置是在服務端需要通過瀏覽器請求.php頁面才能夠執(zhí)行;

  • php的邏輯代碼不會輸出,僅僅只會返回執(zhí)行完畢的結果。

  • 文件定義、注釋:PHP文件以.php結尾,代碼的編寫位置在<?php 寫在這里?>,注釋的寫法跟js一致:

<?php
  //這是單行注釋
  /*
      這是多行注釋
  */
?>
  • PHP變量規(guī)則:

  • 變量以$符號開頭,其后是變量的名稱;

  • 變量名稱必須以字母或下劃線開頭:$a;$b;$a1;$_abc

  • 變量名稱不能以數(shù)字開頭;

  • 變量名稱只能包含字母、數(shù)字和下劃線(A-z0-9 以及_);

  • 變量名稱對大小寫敏感$y$Y 是兩個不同的變量)。

  • 補充:

    • 下面這些是錯誤的變量定義:$1;$哈哈;$^&*;
    • 下面定義的兩個變量是不同的,大寫,小寫x:$x;$X;
  • 數(shù)據(jù)類型

  • PHP支持的數(shù)據(jù)類型包括:字符串、整數(shù)、浮點數(shù)、布爾、數(shù)組、對象、NULLL(注:由于對象中可以使用函數(shù),故對象的語法在下文中會提及);

  • 定義字符串時需要注意:

    • 單引號:'',內部的內容只是作為字符串;
    • 雙引號:"",如果內部是PHP的變量,那么會將該變量的值解析;
  • 字符串連接:不同于JavaScript,PHP中使用.進行連接

// 字符串
$str = '123';

// 字符串連接
$str2 = '123'.'哈哈哈';

// 整數(shù)
$numA = 1; //正數(shù)
$numB = -2;//負數(shù)

// 浮點數(shù)
$x = 1.1;

// 布爾
$a = true;
$b = false;

// 普通數(shù)組:數(shù)組中可以放數(shù)字、字符串、布爾值等等不限制類型
$arr = array('123',123)
//取數(shù)組里的數(shù)據(jù)
$arr[1];

// 關系型數(shù)組:類似于json的格式,但是不是“:”,而是使用“=>”分隔鍵值對,獲取通過“["key"]”即可獲取
$person = array('name'=>'小李子','age'=>'35','skill'=>'發(fā)福');
echo $person['skill'];
  • 運算符:PHP中的運算符跟JavaScript中的基本一致,用法也基本一致:
  • 算數(shù)運算符:+、-、/、*、%
  • 賦值運算符:x = y、x += y、x -= y, 注:這里列舉的并不完全,更為詳細的PHP運算符教程請查閱:http://www.w3school.com.cn/php/php_operators.asp
<?php
    $x=10;
    $y=6;
    echo ($x + $y); // 輸出 16
    echo ($x - $y); // 輸出 4
    echo ($x * $y); // 輸出 60
    echo ($x / $y); // 輸出 1.6666666666667
    echo ($x % $y); // 輸出 4
?>
  • 函數(shù):PHP雖然系統(tǒng)內建了一些函數(shù),但是這不影響我們定義自己的。函數(shù)的作用就是在代碼中可以重復使用的語法塊,頁面加載的時候不會執(zhí)行,只有在被調用的時候才會執(zhí)行;
// 基礎語法
function functionName() {
  //這里寫代碼
}

// 無參數(shù) 無返回值的函數(shù)
function sayhi(){
    echo "Hello World";
}

// 有參數(shù) 無返回值的函數(shù)
function sayName($name){
    echo $name.'你好哦';
}
// 調用
sayName('小狐貍');

// 有參數(shù),參數(shù)有默認值的函數(shù)
function sayFood($food='西蘭花'){
    echo $food.'好好吃';
}
// 調用
sayFood('西葫蘆');// 如果傳入?yún)?shù),就使用傳入的參數(shù)
sayFood();// 如果不傳入?yún)?shù),直接使用默認值

// 有參數(shù),有返回值的函數(shù)
function sum($a,$b){
    return $a+$b
}
sum(1,2);// 返回值為1+2 = 3
  • 對象:PHP中允許使用對象這種自定義數(shù)據(jù)類型;使用時必須先聲明實例化之后才能夠進行使用:
// 定義最基礎的類
class Fox{
    public $name = 'tangtang';
    public $age = 10;
}
$fox = new Fox;
// 對象屬性取值
$name = $fox->name;
// 對象屬性賦值
$fox->name = '小狐貍';

// 帶構造函數(shù)的對象
class fox{
    // 私有屬性,外部無法訪問
    var $name = '小狐貍';
    // 定義方法 用來獲取屬性
    function Name(){
        return $this->name;
    }
    // 構造函數(shù),可以傳入?yún)?shù)
    function fox($name){
        $this->name = $name
    }
}
// 定義了構造函數(shù) 需要使用構造函數(shù)初始化對象
$fox = new fox('小狐貍');
// 調用對象方法,獲取對象名
$foxName = $fox->Name();
  • 內容輸出:echo,PHP語句直接使用即可;輸出字符串推薦使用print_r();函數(shù);輸出復雜數(shù)據(jù)類型,比如數(shù)組,對象,推薦使用var_dump();函數(shù)輸出詳細信息:
$arr =array(1,2,'123');

echo '123';
// 結果為 123

print_r($arr);
// 結果為 Array ( [0] => 1 [1] => 2 [2] => 123 )

var_dump($arr);
/* 結果為
    array
  0 => int 1
  1 => int 2
  2 => string '123' (length=3)
*/
  • 邏輯語句:和js中的一樣;
  • if...else...
$sex = "man";
if ($sex == "man"){
       echo "男生";
}else {
       echo "女生";
}
  • switch...case...
$day = "friday";
switch($day){
        case "monday":
            echo "感覺自己被床封印了";
            break;
        case "friday":
            echo "哇塞,明天就可以休息咯";
            break;
        default:
            echo "感覺自己被掏空";
            break;
}
  • 循環(huán)語句:
  • for循環(huán):
for ($x=0; $x<=10; $x++) {
        echo "數(shù)字是:$x <br>";
}
  • foreach;
$colors = array("red","green","blue","yellow");
// 參數(shù)1為循環(huán)的對象,參數(shù)2會將對象的值挨個取出,直到最后
// 如果循環(huán)的是對象的話,輸出的是對象屬性的值
foreach ($colors as $value) {
        echo "$value <br>";
}
輸出結果為
/*
red
green
blue
yellow
*/
  • while循環(huán):
$num = 0;
while($num <= 10){
        echo "報數(shù):"."$num"."<br>";
        $num++;
}
  • 三元表達式:$a1 = $a0>2 ? 5:0;

header()函數(shù)

  • php中告訴瀏覽器按照哪種文本編碼解析,是php中直接幫助我們定義好的函數(shù),直接使用即可;
  • 用來向客戶端(瀏覽器)發(fā)送報頭,如果出現(xiàn)中文無法顯示,可以嘗試在PHP代碼頂部添加如下代碼設置文本編碼:
  • 設置編碼格式為:utf-8:
header("content-type:text/html; charset=utf-8");
  • 設置頁面跳轉:
  • 設置跳轉到百度首頁:
header("location:http://www.baidu.com");
  • 設置頁面間隔刷新:
header("refresh:3;url=http://www.taobao.com");

網(wǎng)絡數(shù)據(jù)提交

PHP$_GET數(shù)據(jù)獲取

  • 關于$_GET:

  • 獲取get的數(shù)據(jù);

  • php幫我們準備好的超全局對象;

  • 關系型數(shù)組,取值用的是key;

  • 跟提交過來的key是相對的,key是表單元素的name屬性;

  • 有數(shù)據(jù)大小限制,url長度是有限的。

  • 在PHP中,如果想要獲取通過get方法提交的數(shù)據(jù),可以通過$_GET對象來獲取(雖然參數(shù)在地址欄中可以查看);

  • 通過$_GET['key']即可獲取數(shù)據(jù),key是提交的時候表單元素的name屬性值。

  • 如果想要提交數(shù)據(jù):

  • form標簽必須要有action屬性;

  • method=get,不設置默認是get;

  • form表單中的表單元素必須要有name屬性。

  • HTML代碼:下面就是一個簡單的表單代碼,將數(shù)據(jù)提交到01.php,使用get的方式:

<form action="01.php" method="get" >
    <label for="">姓名:
        <input type="text" name="userName">
    </label>
    <br/>
    <label for="">郵箱:
        <input type="text" name= "userEmail">
    </label>
    <br/>
    <input type="submit" name="">
</form>
  • PHP代碼:
<?php
    echo "<h1>GET_PAGE</h1>";
    echo 'userName:'.$_GET['userName'];
    echo '<br/>';
    echo 'userEmail:'.$_GET['userEmail'];
 ?>

PHP$_POST數(shù)據(jù)獲取

  • 關于$_POST:

  • 獲取post的數(shù)據(jù);

  • php幫我們準備好的超全局對象;

  • 關系型數(shù)組,取值用的是key;

  • 跟提交過來的key是相對的,key是表單元素的name屬性;

  • 提交的數(shù)據(jù)大小是沒有限制的,用來上傳文件給服務器。

  • 在PHP中,如果想要獲取通過post方法提交的數(shù)據(jù),可以通過$_POST對象來獲取;

  • HTML代碼:下面就是一個簡單的表單代碼,將數(shù)據(jù)提交到02.php,使用post的方式(注意:代碼中的method改為post)

<form action="02.php" method="post" >
    <label for="">姓名:
        <input type="text" name= "userName">
    </label>
    <br/>
    <label for="">郵箱:
        <input type="text" name= "userEmail">
    </label>
    <br/>
    <input type="submit" name="">
</form>
  • PHP代碼:
<?php
    echo "<h1>POST_PAGE</h1>";
    echo 'userName:'.$_POST['userName'];
    echo '<br/>';
    echo 'userEmail:'.$_POST['userEmail'];
 ?>

POST&GET錯誤處理

  • 當我們直接訪問POST&GET頁面時由于并沒有傳遞任何數(shù)據(jù),會因為$_GET$_POST不存在對應的key而報錯。
  • 處理方式:使用array_key_exists(key, 數(shù)組)函數(shù)來進行判斷:
  • 參數(shù)1:要檢測的key字符串;
  • 參數(shù)2:檢驗的數(shù)組;
    if(array_key_exists('name', $_GET)){
        //如果有數(shù)據(jù),再去讀取
    }else{
        // 反之,可以執(zhí)行一些其他的邏輯
    }

GET和POST的區(qū)別:

  • get:

  • url能夠看到參數(shù);

  • 有數(shù)據(jù)大小限制;

  • url長度是有限制的。

  • post:

  • url看不到;

  • 提交的數(shù)據(jù)大小是沒有限制的(相對而言,一般是在服務端配置限制);

  • 用來上傳文件給服務器。

php在實際開發(fā)中的使用方式

  • 會嵌入到前端工程師寫好的.html中,注意:需要把html后綴給成php;
  • 在希望被替換的位置使用<?php php代碼?>進行占位,就能夠根據(jù)用戶提交的數(shù)據(jù)動態(tài)生成界面。

PHP文件上傳處理01-$_FILES對象(上傳文件)

  • php中上傳的文件,會先以臨時文件的方式保存起來,我們將其移動到其他的位置即可;

  • 在PHP中能夠通過$_FILE獲取上床的文件;

  • 瀏覽器端(客戶端)部分代碼:

  • 注1:form提交數(shù)據(jù)需要使用POST提交;

  • 注2:在input標簽里,type=file;

  • 注3:在form中提交數(shù)據(jù)時,需要在form表單中添加enctype="multipart/form-data"屬性;

  • HTML代碼:

<form action="03.fileUpdate.php" method="post" enctype="multipart/form-data">
    <label for="">照片:
        <input type="file" name = "picture">
    </label>
    <br/>
    <input type="submit" name="">
  </form>
  • 服務端代碼:
  • $_FILES(可以同時獲取多個上傳的文件)用法跟$_GET$_POST類似,都是關系型數(shù)組;
  • #_FILE['key']:可以獲取對應上傳的文件的具體信息(里面包含文件名,臨時文件等),這里的key跟提交時的name相對應;
  • #_FILE['key']['name']可以獲取上傳的文件名;
  • #_FILE['key']['tmp_name']可以獲取上傳的文件保存的臨時目錄
<?php
        sleep(5);//單位秒。 在臨時保存的文件夾里面看不到東西,因為立刻就被刪除了,提交之后讓服務器休息一會,可以看到臨時文件夾里面的文件
        print_r($_FILES);//可以打印 $_FILES的所有信息
?>
  • 現(xiàn)象:
  • 點擊提交后,服務器沒有立即出現(xiàn)反應,而是休息了一會sleep(5);
  • 在wamp/tmp目錄下面出現(xiàn)了一個.tmp文件;
  • .tmp文件一會就被自動刪除了;
  • 服務器返回的內容中,有文件的名字[name] => computer.png,以及上傳文件保存的位置D:\wamp\tmp\php3D70.tmp

PHP文件上傳處理02-移動文件

  • 剛剛演示了$_FILES對象的作用,以及PHP接受上傳文件時,會先保存在一個臨時目錄下,那么接下來我們就演示如何將臨時目錄下面的文件保存起來;

  • 上傳的臨時文件,一會就會被自動刪除,我們需要將其移動到保存的位置;

  • HTML代碼:這部分的代碼不需要改變

<form action="03.fileUpdate.php" method="post" enctype="multipart/form-data">
    <label for="">照片:
        <input type="file" name = "picture">
    </label>
    <br/>
    <input type="submit">
</form>
Array ( [picture] => Array (
        [name] => computer.png
        [type] => image/png
        [tmp_name] => D:\wamp\tmp\php8913.tmp
        [error] => 0 [size] => 5212 )
    )
  • 其中我們需要通過picture(根據(jù)表單標簽的name屬性決定)獲取臨時文件名以及上傳文件名;
<?php
    sleep(5);// 讓服務器休息一會,方便我們查看上傳的臨時文件
    // 第一個參數(shù)是:要移動的文件
    // 第二個參數(shù)是:目標位置(寫的是相對路徑,相對于該php文件的路徑)
    move_uploaded_file($_FILES['picture']['tmp_name'], './upload/'.$_FILES['picture']['name']);
 ?>

PHP設置上傳文件的大小

  • 默認支持的最大上傳文件大小為10兆,在使用wamp過程中,如果想要修改上傳的文件大小,需要如何設置呢?

修改php.ini

  • 步驟:
  • 左鍵點擊wamp;
  • 選擇php;
  • 在彈出的窗口中選擇php.ini
  • 在打開的文件中進行修改,具體修改的地方如下“修改內容”;
  • 修改完畢,保存并重啟wamp。

修改內容

  • 使用文本編輯工具的搜索功能找到下列選項 進行修改:
  • 設置文件最大上傳限制(值的大小可以根據(jù)需求修改)
file_uploads = On;  //是否允許上傳文件 On/Off 默認是On
upload_max_filesize = 32M;  //上傳文件的最大限制
post_max_size = 32M;    //通過Post提交的最多數(shù)據(jù)
  • 考慮網(wǎng)絡傳輸快慢,這里修改一些參數(shù):
max_execution_time = 30000; //腳本最長的執(zhí)行時間,單位為秒
max_input_time = 600;   //接收提交數(shù)據(jù)的時間限制,單位為秒
memory_limit = 1024M;   //最大的內存消耗

PHP與js的區(qū)別:

  • 定義變量:$a;
  • 拼接字符串:使用點.;
  • 數(shù)組:array("abc",111);array('a'=>111,'b'=>222);
  • 雙引號使用有區(qū)別。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • Php:腳本語言,網(wǎng)站建設,服務器端運行 PHP定義:一種服務器端的HTML腳本/編程語言,是一種簡單的、面向對象...
    廖馬兒閱讀 2,165評論 2 38
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,710評論 25 708
  • part 1 安靜的辦公室里,其他人都在電腦前忙碌著,我看著手里的工作,不由得望著樓下的地鐵口看著來往的人群發(fā)呆。...
    佳子萋萋閱讀 276評論 2 4
  • 用心走路,常深; 用腳走路,常遠!
    靖默閱讀 334評論 0 0