1. 程式人生 > >php詳解及基本知識

php詳解及基本知識

對於初次學習php的來說,需要在自己電腦上搭建php環境。省去空間和上傳的麻煩!
這裡推薦一個軟體:WampServer是一款由法國人開發的Apache Web伺服器、PHP直譯器以及MySQL資料庫的整合軟體包。免去了開發人員將時間花費在繁瑣的配置環境過程,從而騰出更多精力去做開發。
這篇文章講的安裝很好了,wampserver安裝詳解

1.php入門原理

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

(1)php執行的原理:

這裡寫圖片描述
最終解析成:
這裡寫圖片描述
訪問php頁面是看不到PHP程式碼的;

(2)兩種PHP執行方式

(1) 通過虛擬路徑訪問,也就是URL地址:單執行緒;
(2) CLI執行方式:真正的多執行緒
這裡寫圖片描述

2.php語法

(1).php指令分隔符“分號”

php在程式中使用功能執行語句,例如變數的宣告、內容的輸出、函式的呼叫等,是用來在程式中執行某些特定功能的語句,這種語句也可以成為指令,php需要在每個指令後用分號結束。
記得剛學著做php原生態的時候,找個bug半天就是沒有找到,後面發現是有個語句分號沒寫,以前用慣了javascript的語法,有時候習慣不加分號。
ps:養成良好的程式碼格式規範還是有必要的。

(2)程式碼註釋

php註釋的三種形式:
以“/”和“/”閉合多行註釋符,
“//”和”#”開始的單行註釋符。

(3)變數

1.php變數的定義是使用$。
1) 以$開頭,$後面不能直接跟數字,後面跟字母、數字、下劃線;
2) 變數名稱區分大小寫,PHP關鍵詞不區分大小寫;
3)第一次賦值,就建立了變數。必須使用"$"後跟變數名錶示。再次給該變數賦值會覆蓋之前的變數。
2.變數的型別
4種標量型別:boolean(布林型)integer(整型)float(浮點型)string(字串)
2種複合型別:array(陣列)object(物件)
2種特殊型別:resource(資源)、NULL
如果想看某個表示式的值和型別,可以使用函式var_dump()
3.變數賦值

1)賦值傳值:
$h = 120;
    $q = $h; //將$h的值拷貝給$q
    $h = 135;
    echo $h;  //輸出135 

2)引用傳值:
$h = 155;
    $q = &$h; //引用傳值,表示$h的地址傳給$q
    $q = 195;
    echo $h; //輸出195

3)可變變數

$a1 = array('username' => '鄧海濤', 'passwd'=>'123456', 'tel'=>'15982369', 'email'=>'[email protected]');
    foreach ($a1 as $key122 => $value134) {
        ${$key122} = $value134;
    }
    echo $email;
    echo $tel;
4.變數檢測
1)is_array:是否是陣列;
2)is_bool :是否是布林型;
3)is_float :是否是浮點型;
4)is_int :是否是整數;
5)is_null :是否為 NULL; 
6)is_numeric :是否為數字或數字字串;
7)is_object :是否是一個物件;
8)is_resource :是否為資源型別;
9)is_string :是否是字串;

(4)陣列(arry)

使用print_r()函式檢視陣列中的全部內容。
陣列分索引陣列和關聯陣列,用array定義一個數組,陣列的元素可以是任意型別的值;如果陣列的元素還是陣列,那麼該變數就是多維陣列;

    //PHP陣列的定義
    $array1 = array();
    // $array1 = []; //用於7.0版本以後
//索引陣列
$student = array('樑剛','鄭鴻斌','易航','譚俊');//索引從0開始
    $num = array(1, 2, 3, 4, 5);
    //計算陣列的元素個數:count();
    $an = count($student);
    echo $an;
//關聯陣列
$student1 = array('name'=>'趙梓茗', 'age'=>18, 'height'=>190.02); 
    //多維陣列
    $students = array(
            0=>array('name'=>array('realname'=>'鄧海濤', 'age'=>18, 'height'=>190),
            1=>array('name'=>'鄧海濤',  'age'=>18, 'height'=>190),
            2=>array('name'=>'鄧海濤',  'age'=>18, 'height'=>190),
        );
    var_dump($students);

3.php語句操作詳解

1.php的輸出方式

1)Echo:輸出字串; 
2)print_r() :列印變數的易於理解的資訊;
3)var_dump():列印易於理解的完整資料資訊及結構,包括字串長度;
4)exit():列印並停止執行PHP指令碼;
die():同exit

2.單引號和雙引號

1)雙引號裡面的變數會解析,單引號不會解析;
2)雙引號裡面的變數如果還要內容,最好用{}括起來;
3)推薦使用單引號:執行效率稍微高點;
4)如果輸出單引號或者雙引號,需要轉義;

這裡寫圖片描述

3.SESSION和COOKIE

1)SESSION:為每個訪問者建立一個唯一 id ,並基於這個ID 來儲存資訊,Session_id()返回當前會話id;
2)通過session_start() 啟動session會話(必須位於 <html> 標籤之前); 
3)$_SESSION[‘username’] = ’使用者賬號’; 用於設定session值; 
4)$_SESSION[‘username’] 用於獲取session值; 
5)unset() 用於釋放指定的session變數; 
6)session_destroy() 將重置所有session資料;
7)cookie 資訊儲存在使用者電腦中,每當使用者訪問網頁時同時會發送cookie ;
setcookie(name, value, expire); 使用者設定cookie內容; 
$_COOKIE[“user”]用於獲取cookie的值; 
setcookie(“user”, “”, time()-3600);用於刪除cookie內容 ;

4.表單處理

1)Action指定後臺處理的頁面,method指定資料傳輸方式:
這裡寫圖片描述
2)PHP如何接收POST過來的資料:
獲取指定輸入框的資料:這裡寫圖片描述

全部資料存放在一個數據裡面的:這裡寫圖片描述

3)PHP接收GET過來的資料方式:$_GET[‘username’];

5.流程控制

陣列一般使用foreach遍歷:

$arrar1 = array(1, 56, -89, 120, 568, 1028, 56, 3);
$max = $arrar1[0];
foreach ($arrar1 as $key => $value) {
    if($max < $value){
        $max = $value;
    }
}
echo $max;

6.函式

1)函式是可重複使用的程式碼塊,使程式結構清晰,易於維護。
2)函式內部使用外部的變數使用global;
3)函式分為自定義函式和內建函式;

function fn(引數1,引數2,引數3…) {
執行的程式碼; 
Return 返回的資料,可以是陣列、物件、字串等
}

7.檔案讀寫

1)開啟檔案:fh=fopen(filename, “開啟模式”);開啟模式描述如下表:
這裡寫圖片描述

2)讀取開啟的檔案指定長度的內容:fread(fh,filesize(filename));
3)讀取檔案單行內容:Fgets($fh);
一行一行讀取檔案所有內容:

while(!feof($fh)){
     $str1 = fgets($fh);
}

4)檔案寫入:

fwrite($fh, “訪客1\tip:112.105.213.20\t時間:2017-03-06 16:42:21 " . PHP_EOL);

5)關閉開啟的檔案:fclose($fh);
6)一次性獲取檔案內容和寫入檔案的方式:

//讀取遠端檔案內容
    $str =    file_get_contents('http://localhost/indexmk/preview.do');
    var_dump($str);
    //寫入檔案
    file_put_contents('a.html', $str);

8.檔案上傳

1)表單method必需為POST;
2)指定表單enctype屬性值為”multipart/form-data” :
enctype:encodetype,即編碼型別;
multipart/form-data:表單資料由多部分構成,如文字、二進位制資料檔案等;
3)指定input標籤的type為file:

<input type=“file” name=“uploadfile” id=“uploadfile” />

4)使用$_FILES[‘uploadfile’]獲取上傳檔案的相關資訊;
5)move_uploaded_file() :將上傳的檔案從臨時空間移動到你想儲存的目錄:

move_uploaded_file($_FILES["uploadfile"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

4.面向物件程式設計

1)面向物件程式設計簡稱OOP( Object-oriented programming );
2)類是具有相同屬性和服務的一組物件的集合;
3)物件是類的例項;
4)如何定義一個類:

    class Person
    {
        //類的屬性
        public $name;
        //建構函式,對類和屬性進行初始化
        function __construct($name1, $age1){
            $this->name 	= $name1;
        }       
    }

5)例項化一個物件

$person1 = new Person('李鑫', 170);
//呼叫物件的屬性
echo  $person1->name;

6)成員變數
類中的變數,也稱為屬性。成員變數用來儲存資訊資料,或與成員方法進行互動來實現某項功能。
定義成員變數的格式為:關鍵字 成員變數名。
訪問成員變數和訪問成員方法是一樣的。只要把成員方法換成成員變數即可,格式為:
物件名 -> 成員變數

7)成員方法
類中的函式被稱為成員方法。
函式和成員方法唯一的區別就是,函式實現的是某個獨立的功能,而成員方法是實現類中的一個行為,是類的一部分。

class Student{
    //學生的名字
    var $name; 
    function setName($name){ 
     //把區域性變數給當前物件的全域性變數賦值
     $this->name = $name;
    }
    function getName(){
     //返回當前物件全域性變數$name
     return $this->name;
    }
   }

8)PHP 建構函式
建構函式 ,是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值;

    function __construct( $name, $age ) 
    { 
        $this->name = $name; 
        $this->age= $age;
    }

9)解構函式
析構方法的作用和構造方法正好相反,物件生命週期結束時呼叫;

    function __destruct( $name, $age ) 
    { 
        echo $this->name; 
        echo $this->age; 
    } 

10)類的繼承
PHP 使用關鍵字 extends 來繼承一個類,PHP 不支援多繼承。

     class ChildClass extends ParentClass { 
        // 程式碼部分 
    } 

11)訪問控制
–public(公共成員)
可以公開的、沒有必要隱藏的資料資訊。可以在程式中的任何位置(類內、類外)被其他的類和物件呼叫。子類可以繼承和使用父類中所有的公共成員;
–private(私有成員)
被private關鍵字修飾的變數和方法,只能在所屬類的內部被呼叫和修改,不可以在類外被訪問。在子類中也不可以;
–protected(保護成員)
被protected修飾的類成員,可以在本類和子類中被呼叫,其他地方則不可以被呼叫;

12)static: 宣告類屬性或方法為 static(靜態),可以不例項化類而直接訪問;

13)Final 關鍵字
a)如果父類中的方法被宣告為 final,則子類無法覆蓋該方法;
b)如果一個類被宣告為 final,則不能被繼承;

14)呼叫父類構造方法: parent::__construct();

15)自動載入類 __autoload()函式:

function __autoload($classname) {
    require_once $classname . '.php';
}
// MyClass1類不存在時,自動呼叫__autoload()函式,傳入引數”MyClass1”
$obj = new MyClass1();

總結

php原生態的基礎程式設計知識學習到了這,下次介紹ci框架下的php程式設計,基於mvc程式設計模式,可以更加方便更加快速的開發程式碼。