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

PHP基礎(chǔ)

服務(wù)端web開發(fā)

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

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

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

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

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

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

PHP簡介

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

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

PHP常見語法

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

  • 注意點(diǎn):

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

  • 不要直接用sublime、webstorm運(yùn)行;

  • 必須寫在<?php ?>標(biāo)簽中;

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

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

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

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

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

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

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

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

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

  • 補(bǔ)充:

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

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

  • 定義字符串時(shí)需要注意:

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

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

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

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

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

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

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

// 關(guān)系型數(shù)組:類似于json的格式,但是不是“:”,而是使用“=>”分隔鍵值對,獲取通過“["key"]”即可獲取
$person = array('name'=>'小李子','age'=>'35','skill'=>'發(fā)福');
echo $person['skill'];
  • 運(yùn)算符:PHP中的運(yùn)算符跟JavaScript中的基本一致,用法也基本一致:
  • 算數(shù)運(yùn)算符:+、-、/、*、%;
  • 賦值運(yùn)算符:x = y、x += y、x -= y, 注:這里列舉的并不完全,更為詳細(xì)的PHP運(yùn)算符教程請查閱: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)內(nèi)建了一些函數(shù),但是這不影響我們定義自己的。函數(shù)的作用就是在代碼中可以重復(fù)使用的語法塊,頁面加載的時(shí)候不會執(zhí)行,只有在被調(diào)用的時(shí)候才會執(zhí)行;
// 基礎(chǔ)語法
function functionName() {
  //這里寫代碼
}

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

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

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

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

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

echo '123';
// 結(jié)果為 123

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

var_dump($arr);
/* 結(jié)果為
    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會將對象的值挨個(gè)取出,直到最后
// 如果循環(huán)的是對象的話,輸出的是對象屬性的值
foreach ($colors as $value) {
        echo "$value <br>";
}
輸出結(jié)果為
/*
red
green
blue
yellow
*/
  • while循環(huán):
$num = 0;
while($num <= 10){
        echo "報(bào)數(shù):"."$num"."<br>";
        $num++;
}
  • 三元表達(dá)式:$a1 = $a0>2 ? 5:0;。

header()函數(shù)

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

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

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

  • 關(guān)于$_GET:

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

  • php幫我們準(zhǔn)備好的超全局對象;

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

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

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

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

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

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

  • form標(biāo)簽必須要有action屬性;

  • method=get,不設(shè)置默認(rèn)是get;

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

  • HTML代碼:下面就是一個(gè)簡單的表單代碼,將數(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ù)獲取

  • 關(guān)于$_POST:

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

  • php幫我們準(zhǔn)備好的超全局對象;

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

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

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

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

  • HTML代碼:下面就是一個(gè)簡單的表單代碼,將數(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錯(cuò)誤處理

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

GET和POST的區(qū)別:

  • get:

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

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

  • url長度是有限制的。

  • post:

  • url看不到;

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

  • 用來上傳文件給服務(wù)器。

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

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

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

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

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

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

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

  • 注2:在input標(biāo)簽里,type=file;

  • 注3:在form中提交數(shù)據(jù)時(shí),需要在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>
  • 服務(wù)端代碼:
  • $_FILES(可以同時(shí)獲取多個(gè)上傳的文件)用法跟$_GET,$_POST類似,都是關(guān)系型數(shù)組;
  • #_FILE['key']:可以獲取對應(yīng)上傳的文件的具體信息(里面包含文件名,臨時(shí)文件等),這里的key跟提交時(shí)的name相對應(yīng);
  • #_FILE['key']['name']可以獲取上傳的文件名;
  • #_FILE['key']['tmp_name']可以獲取上傳的文件保存的臨時(shí)目錄;
<?php
        sleep(5);//單位秒。 在臨時(shí)保存的文件夾里面看不到東西,因?yàn)榱⒖叹捅粍h除了,提交之后讓服務(wù)器休息一會,可以看到臨時(shí)文件夾里面的文件
        print_r($_FILES);//可以打印 $_FILES的所有信息
?>
  • 現(xiàn)象:
  • 點(diǎn)擊提交后,服務(wù)器沒有立即出現(xiàn)反應(yīng),而是休息了一會sleep(5);
  • 在wamp/tmp目錄下面出現(xiàn)了一個(gè).tmp文件;
  • .tmp文件一會就被自動(dòng)刪除了;
  • 服務(wù)器返回的內(nèi)容中,有文件的名字[name] => computer.png,以及上傳文件保存的位置D:\wamp\tmp\php3D70.tmp

PHP文件上傳處理02-移動(dòng)文件

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

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

  • 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ù)表單標(biāo)簽的name屬性決定)獲取臨時(shí)文件名以及上傳文件名;
<?php
    sleep(5);// 讓服務(wù)器休息一會,方便我們查看上傳的臨時(shí)文件
    // 第一個(gè)參數(shù)是:要移動(dòng)的文件
    // 第二個(gè)參數(shù)是:目標(biāo)位置(寫的是相對路徑,相對于該php文件的路徑)
    move_uploaded_file($_FILES['picture']['tmp_name'], './upload/'.$_FILES['picture']['name']);
 ?>

PHP設(shè)置上傳文件的大小

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

修改php.ini

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

修改內(nèi)容

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

PHP與js的區(qū)別:

  • 定義變量:$a;
  • 拼接字符串:使用點(diǎn).;
  • 數(shù)組:array("abc",111);array('a'=>111,'b'=>222);
  • 雙引號使用有區(qū)別。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容