首頁  >  文章  >  專題  >  記錄學習PHP與mySQL的辛酸史

記錄學習PHP與mySQL的辛酸史

coldplay.xixi
coldplay.xixi轉載
2020-12-02 17:20:083572瀏覽

php mysql專欄介紹其學習歷程,乾貨滿滿

記錄學習PHP與mySQL的辛酸史

推薦:php mysql


##此文記錄自己學習PHP和mySQL的過程。之前在網路上簡單學習了一下這兩門語言,並且自己編寫了PHP,可以正常連接mySQL,也可以插入資料。但是自己總覺得還是不太清晰。所以藉了本O'REILLY的PHP,MySQL,JavaScript, & CSS。希望能夠理清程式設計思路,​​學得更加通透些,對自己以後寫專案有所幫助。

首先,來了解一下,這幾門語言主要負責些什麼。 PHP是負責主要的在伺服器上的工作,MySQL是負責所有的數​​據,CSS和JavaScript則是管理網頁的展現。然而JavaScript也能與PHP進行通信,無論何時需要更新一些伺服器上的或是頁面上的資訊。

PHP

PHP是相對鬆散的語言。也就是它的變數類型不需要在使用前被宣告。字串內的數字可以自動轉換為數字類型。

PHP是用 ‘$' 來定義變數的。例如:$ my_counter = 1;

使用空格(whitespace)讓程式碼變得更整潔清晰,當自己回頭再去查看的時候也比較容易理解。同時也幫助其他的開發人員去維護你的程式碼。如果需要聲明一個數字變量,無論是Int類型還是Float類型都可以直接聲明。

例如:$ count = 17;$ count = 17.5;

PHP的變數起名規則

1. 以字母開始或'_'(underscore);

2. 只能包含a-z, A-Z, 0-9 和'_' (underscore);

3. 不能包含空格,如果一定包含兩個單詞,一定用'_' (underscore )來分開;

4. 對大小寫是sensitive的,$High_Score與$high_score是不同的變數。

PHP的常數(constants)

1. 宣告一個常數不需要用($),一般以字元或底線開頭

2. 只能用define方法來賦值給常數define ( 'TIREPRICE' , 100 ) ;

3. 在腳本中無法改變該值。

4. 與變數不同,常數貫穿整個腳本是自動全域的。

5. 盡量不要前後都使用(_)來起變數名。

設定常數,使用define() 函數- 它使用三個參數:

第一個參數定義常數的名稱    第二個參數定義常數值    可選的第三個參數規定常量名是否對大小寫不敏感。預設是 false。


簡短風格 short style : $tireqty 非常方便,但需要將register_globals設定選項置為on,由於安全性原因,該選項預設為off。

中等風格 Medium style: $_POST[ ' tireqty ' ] 推薦使用

冗長風格 Long style $HTTP_POST_VARS[ ' tireqty' ] 已經被棄用#我們通常建議使用中等風格來宣告變數。如果你建立一個簡短風格,然後把中等風格賦值給它沒有安全問題,反而更容易被使用。 $tireqty = $_POST [ 'tireqty' ] ;PHP的字串規則單引號是不會把文字裡中以$開頭的字串當作變數的。如果要把它當成變數來看那就需要用雙引號。如果字串內要使用單引號的話,不能直接使用,這個和JavaScript一樣。需要轉義字元用“\”來解決單引號問題。此外,\t,\n,\r在雙引號裡才有效。 PHP也提供了多行數列的運算子“<<<”,優點是輸出大段HTML方便,不需要轉義,而且可以引用變數。 「<<<」之後跟著任意你自己喜歡的名字(自訂分界符),並以此未結束。之間文字打回車不會被顯示。裡面的變數將可以使用,如果不需要出現變數可以用 “.”來連接。此時就不會被解讀為變數了,而是正常輸出。 在使用(<<<)時,還需注意的一點是,標識符結束符串(如:END)需要獨佔一行,前後都不允許再有內容包括空格,否則這個PHP檔案就相當於廢了。

echo和print指令的差別######這兩個指令是十分相似的。但是###print###是一個函數方法需要用到一個參數,然而###echo###是###PHP###語言的結構。在普通的文字輸出上,###echo###要比###print###稍微快一點,因為它不是一個函數不需要設定一個回傳值。同時,因為###echo###它不是函數,所以不能被用於大量複雜的表達式,但是###print###卻可以。 ###

PHP的函數方法

Function是用來區分為了實作不同特殊功能的程式碼。例如這個程式碼列印三行字,但是如果我要列印十幾個的話,就需要不停複製貼上這些程式碼,無疑是讓程式碼變得更為複雜和龐大。但是用了function就只需要使用一次函數就可以印十幾次。它是程式碼變得更簡潔並且可讀性更高。聲明function的方式與JavaScript一樣。

例如:

function longdate($timestamp){ 

    return date("l F jS Y",$timestamp);

# return date("l F jS Y",$timestamp);

}

PHP的變數作用域(Variable Scope)

在PHP語言中,你可以決定變數的作用域,例如,只在函數裡面使用,或者是全域範圍的,任何範圍都能被使用。

Local Variables(本地變數)

是指變數被建立只被允許在函數中呼叫。它是零時性的儲存,一旦函數完成也就不存在了。 Global Variables(全域變數)有些時候我們也需要全域變量,因為你希望你所有的程式碼都能呼叫到它。當需要宣告全域變數時,我們需要使用關鍵字

global

。不建議使用全域變量,實在沒有其他方法時,可以使用。因為一般程式是被打碎成多個小零件,這樣資料發生問題也是一些小問題容易被維護。但是如果上千行的程式碼程式被發現你的全域變數出現了問題。那麼將需要花非常大的精力與時間去維護它。同時,建議在為全域變數命名時,最好使用大寫字母。

Static Variables(靜態變數)
當你使用變數希望它只能在函數中被調用,但是你也希望它能再下次使用這個函數時,值不會被恢復到原來的值。這時我們就需要用到靜態變數。同時要注意的是,靜態變數不能給予一個計算公式或函數,必須賦一個實際的值。

例如:

static $int = 0; //Allowed

static $int = 1 2; //Disallowed (will produce a Parse error)

static $int = sqrt(144); //Disallowed

Superglobal Variables(超級全域變數)PHP 中的許多預定義變數都是“超全域的”,這意味著它們在一個腳本的全部作用域中都可用。

這些超全域變數是:

$GLOBALS

#$_SERVER

$_REQUEST

##$_POST

$_GET

$_FILES

$_ENV

#$_COOKIE

$_SESSION

這些超級全域變數名都是使用_下劃線和大寫字母,所以在起名時應該避免重複以造成程序混亂。

PHP表達式(Expression)

布林表達式,值得注意的一點是,在PHP中,TRUE的值為“1”,而FALSE的值為NULL,或者是空值。因為在某些語言裡FALSE被定義為0或-1。

此外,PHP會依照字面上的值(literals)來理解去判斷變數類型。

例如:

$myname = "Brian";

$myage = 37;

echo "a: " . 73             . "
"; //Numeric literal

echo "b: " . "Hello"      . "
"; //String literal

#echo "c : " . FALSE      . "
"; //Constant literal

echo "d: " . $myname  . "
"; //Variable string literal

####。 ###echo "e: " . $myage     . "
"; //Variable numeric literal######結果是:#######a: 73 b: Hello c:        d####a: 73 b: Hello c:    d    d####a: 73 b: Hello c:    d    d#### : Brian  e: 37############PHP運算子(operators)#########PHP提供了大量有用的運算符,例如計算,字串和邏輯的運算符。 “###.###”運算子用來連接字串。 #########PHP 邏輯運算子(logical)#########「###or###」傳回值是布林值。如果 $x 和 $y 至少有一個為 true,則傳回 true。 ######“###xor###”傳回值是布林值。條件中不是A就是B。如果A就回傳True,如果B也回傳True。但如果是A和B就回傳False,如果即不是A也不是B就回傳False。所以條件符合的有且只有一個為 true,則回傳 true。 #########PHP 結合性運算子(associativity)#########這類型的運算子是從右到左計算。 ############Operator                                             Example#######

新                                             時邏輯NOT

~                                                                                   增加與                   一元加法與取反

(int)                 轉換為整數                        $c = ( int) ($a / $b);

(double)                                                                     轉換為字串

(陣列) )            轉換為陣列

(object)                                                                                            中中禁止錯誤回報         

大 好吧附註:

=                                         

條件式是動態頁面的核心,它能夠簡單地根據不同的條件創建出不同的頁面結果。有清晰的表達方法:if#,

switch

?(三目運算子) .
這個和JavaScript都是一樣的。

PHP循環(Looping)

能地周而復始地工作直到事情發生狀態。循環方式有:whiledo……whilefor。


PHP的函數與物件

函數的好處:

1.簡潔2。減少語法和其他編寫程式的錯誤3。減少程式檔案的載入時間

4。同時減少執行時間,因為每個函數都只需被解析一次,那麼就會被呼叫多少次。

5.函數接受參數,這樣能夠被普遍使用,也同時能被特殊的情況使用。

PHP有上百種已經編寫好的函數,從而成為一種豐富的語言。

#Include

require

require()

的效能與

include()

相似,都是類似的不同的端點對應:對
include()

語句來說,在執行檔時每次都要進行讀取和評估;而對於require()也就是說,文件只處理一次。這意味著如果可能執行多個的程式碼,則使用require()效率比較高。另外一方面,如果每次執行程式碼時是讀取不同的文件,或者有透過一組檔案迭代的循環,就使用

include()

語句。

require的使用方法如:require("myfile.php"),這個語句通常放在PHP腳本程式的最前面。 PHP程式在執行前,就會先讀入require()語句所引入的文件,使它變成PHP腳本文件的一部分。 include使用方法和require一樣如:include("myfile.php"),而這個語句一般是放在流程控制的處理區段。 PHP腳本檔在讀到include()語句時,才將它所包含的檔案讀取進來。這種方式,可以把程式執行時的流程簡單化。

include在使用時載入   require一開始就載入

include/require_once後綴表示已載入的不載入

PHP系統在載入PHP程式時有一個偽編譯過程,可讓程式運作速度加快。但include的文檔仍為解釋執行。 include的檔案中出錯了,主程式繼續往下執行,require的檔案出錯了,主程式也停了,所以包含的檔案出錯對系統影響不大的話(如界頁面檔案)就用include,否則用require

require()include()語句是語言結構,不是真正的函數,可以像php中其他的語言結構一樣,例如echo()可以使用echo("ab")形式,也可以使用echo "abc"形式輸出字串abc。 require()include()語句也可以不加圓括號而直接加參數。

include_once()require_once()語句也是在腳本執行期間包含執行指定檔案。此行為和include()語句及require()類似,使用方法也一樣。唯一區別是如果該文件中的代碼已經被包括了,則不會再次包括。這兩個語句應該用於在腳本執行期間,同一個檔案有可能被包含超過一次的情況下,確保它只被包括一次,以避免函數重定義以及變數重新賦值等問題。

function_exists("function name")是判斷這個函數是否有效。


物件Object

面對物件(object-oriented programming OOP)讓函數提升到新的水平。當一些方法要被重複使用,那麼就可以考慮把這些方法和資料放入物件中去。一起想看一個社群網站,它有很多部分組成。一個組成部分是要管理所有的使用者函數。例如讓新用戶註冊,和讓存在的用戶更改他們的資訊。一般來說,我們會建立一些函數去管理這些並且請求MySQL資料庫去記錄所有的使用者。而我們知道對象後,完全可以建立一個名為User的對象,並且把所有的資料與方法放入這個對象裡。那麼無論什麼時候當需要去操作一個使用者的資料時,我們就可以簡單地建立一個和User類別有關的物件。物件中的資料稱為屬性,物件中的函數稱為方法。如果你發現需要類外一個類,這個類別與User類別很相似,但有些不同,這時我們需要繼承User類別。那麼原來的User類別就被成為父類別(superclass),而新的類別就變成子類別(subclass/derived class)。

宣告一個類別(Declaring a Class

在使用一個物件之前,必須用關鍵字class定義一個類別。定義一個類別包含類別名稱(它是大小寫sensitive的),類別的屬性,和類別的方法。可以使用 '->' 來賦予變數/屬性賦值。這是變數不需要用$來宣告。

建構子(Constructors)

在類別裡面有參數且與類別名稱相同的方法稱為建構子。現在很多使用__construct來命名建構函式。當不再需要這個物件的時候,就需要呼叫destructor,來釋放這個物件所佔的記憶體。但是destructor不需要設計,因為系統會自動釋放特定的記憶體。除非你用到了動態內存,那麼你就是要自己設計一個destructor告訴系統要釋放哪些內存。

宣告一個方法(Methods)

宣告一個方法與宣告一個函數非常類似,但還是有少許不同。例如,方法的命名開頭跟隨兩個底線(__)。 $this是指現在這個對象,並傳回這個對象的屬性值。

靜態方法(static methods)

在php程式設計中,static關鍵字宣告一個屬性或方法是和類別相關的,而不是和類別的某個特定的實例相關,因此,這類屬性或方法也稱為「類別屬性」或「類別方法」

如果存取控制權限允許,可不必建立該類別物件而直接使用類別名稱加兩個冒號“::”調用。

User::pwd_string();

class User

{

    static function pwd_string()

    {

        echo "Please

        echo "Please

      }

}

?>

「宣告屬性(Declaring Properties)

##」宣告屬性不是必須在類裡的,類別裡沒有屬性和方法但仍然是合法的。但為了幫助自己和其他人更好地理解與維護程式碼,還是建議把屬性的聲明放入類別裡。

$object1 = new User();

$object1->name = "Alice";

echo $object1->name;

class User {}

?>

宣告一個常數(Declaring Constant)

定義一個常數需要在常數名前面加上

const。常量名一般使用大寫字母,使他們變得更為突出。當常數/變數使用關鍵字self兩個冒號(::),就能夠被直接引用。

屬性和方法的作用域(Property and Method Scope)

PHP提供了3個關鍵字來控制屬性和方法的作用域。

1. public —— 這些屬性是用

varpublic關鍵字聲明的。 pubilic與var是能夠被互換的,雖然這是不被贊成的。當外部的程式碼要呼叫這個屬性,或是拓展類別需要繼承它,我們就應該用public來宣告。

2. protected —— 這些屬性和方法只能被物件中的方法和任何子類別引用。當不想被外部程式碼來調用,但是拓展類別希望繼承它,我們就可以用protected來聲明。

3. private —— 這些成員只能能被同一個類別引用,子類別也是不能引用的。當我們不想這些成員被外部任何程式碼方法或類別來調用,就應該使用private來進行聲明。

靜態屬性和方法(static properties and methods)

#靜態方法可以直接調用,而屬性是不可以的。屬性的呼叫可以使用關鍵字self和雙冒號的方法來呼叫類別內部的靜態屬性。

繼承(Inheritance)

任何類別都能被繼承。減少程式碼的重複性,只要改變一小部分,調整不同的地方。使用關鍵字

extends進行拓展聲明。


PHP陣列(Arrays)

is_array($array_name)傳回布林值,可以判斷這個陣列是否是有效的。

sort($array_name, SORT_NUMERIC/STRING)透過數字和字串從小到大排序。

rsort($array_name, SORT_NUMERIC/STRING)透過數字和字串從大到小排序。

shuffle($array_name)打亂數組,隨機排序。

explode(' ',"string")這個是十分有用的方法,他會把輸入的string,透過要求分隔成單一元素然後放入陣列中。第一個參數是透過什麼來分割,第二個是放入的string。

extract()這個方法可以很容易地把陣列變成鍵值對的形式。經常可以用於$_POST$_GET

extract(array,extract_rules,prefix)有三個參數,

第一個array必要。規定要使用的輸入。

第二個extract_rules可選。 extract() 函數將檢查每個鍵名是否為合法的變數名,同時也檢查和符號表中的變數名稱是否衝突。對非法、數字和衝突的鍵名的處理將根據此參數決定。可以是下列值之一:

可能的值:

  • EXTR_OVERWRITE - 預設。如果有衝突,則覆蓋已有的變數。

  • EXTR_SKIP - 如果有衝突,不覆寫已有的變數。 (忽略陣列中同名的元素)

  • EXTR_PREFIX_SAME - 如果有衝突,在變數名稱前加上前綴 prefix。自 PHP 4.0.5 起,這也包括了對數位索引的處理。

  • EXTR_PREFIX_ALL - 為所有變數名稱加上前綴 prefix(第三個參數)。

  • EXTR_PREFIX_INVALID - 僅在非法或數字變數名稱前加上前綴 prefix。本標記是 PHP 4.0.5 新加的。

  • EXTR_IF_EXISTS - 僅在目前符號表中已有同名變數時,覆寫它們的值。其它的都不處理。可以用在已經定義了一組合法的變量,然後要從一個數組例如 $_REQUEST 中提取值覆蓋這些變量的場合。本標記是 PHP 4.2.0 新加的。

  • EXTR_PREFIX_IF_EXISTS - 僅在目前符號表中已有同名變數時,建立附加了前綴的變數名,其它的都不處理。本標記是 PHP 4.2.0 新加的。

  • EXTR_REFS - 將變數作為引用提取。這有力地顯示了導入的變數仍然引用了 var_array 參數的值。可以單獨使用這個標誌或在 extract_type 中用 OR 與其它任何標誌結合使用。本標記是 PHP 4.3.0 新加的。

第三個參數,prefix可選。請注意 prefix 僅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時需要。如果附加了前綴後的結果不是合法的變數名,則不會匯入符號表。前綴和陣列鍵名之間會自動加上一個底線。

程式碼如下:

    $a = 'Original'; 

    $my_array = array("a" = > "Cat","b" => "Dog", "c" => "Horse"); 

    extract($my_array); 

#    extract($my_array); 

#    echo "\$a = $a; \$b = $b; \$c = $c"; 

?> 

輸出: 

$a = Cat;

$b = Dog; 

$c = Horse 

#使用完整參數: 

程式碼如下:

##< ;?php

    $a = 'Original'; 

    $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); 

    extract($my_array, EXTR_PREFIX_SAME, 'dup'); 

#    echo "\$a = $a; \$b = $

#    echo "\$a = $a; \$b = $

\$bb = $b; c = $c; \$dup_a = $dup_a;";     

?> 

輸出: 

$a = Original; 

$b = Dog; 

$c = Horse; 

$dup_a = Cat; 

在action.php中只要使用extract()函數將$_POST全域數據解開: 

action.php 

程式碼如下:

    extract($_POST);  //相當於$username = $_POST['username'];  //$password = $_POST['password']; 

?> 

compact(var1,var2 ...)

函數建立一個由參數所帶變數組成的陣列。如果參數中存在數組,則該數組中變數的值也會被取得。

本函數傳回的陣列是一個關聯數組,鍵名為函數的參數,鍵值為參數中變數的值。

本函數執行的行為與

extract()

正好相反。

範例1

使用不符變數的字串,以及變數名稱陣列:

    $firstname = "Bill";

    $lastname = "Gates";

#    $age = "60";

##    $name = array("firstname", "lastname");

    $result =compact($name, "location", "age");

    print_r($result);

?>

輸出結果:

Array ( [firstname] => Bill [lastname] => Gates [age] => 60 )

其他相關的方法:

current() 

- 傳回陣列中的目前元素的值

end()

 - 將內部指標指向陣列中的最後一個元素,並輸出

next()

 - 將內部指標指向陣列中的下一個元素,並輸出

prev() 

- 將內部指標指向陣列中的上一個元素,並輸出

each() 
- 傳回目前元素的鍵名和鍵值,並將內部指標向前移動

printf(arg1,arg2,agr )函數輸出格式化的字串。 arg1arg2arg  參數將插入到主字串中的百分號(%)符號處。該函數是逐步執行的。在第一個 % 符號處,插入 arg1,在第二個 % 符號處,插入 

arg2
,依此類推。

                                                            描述

format                                                       ###必要。規定字串以及如何格式化其中的變數。 ###

                                                                   可能的格式值:

                                                                與                                                                                                              %c - ASCII 值對應的字元

                                                                    %d - 包含正負號的十進位數(負數、0、正數)

                                                 %e - 使用小寫的科學數法(例如1.2e 2)

                                                       E - 使用大書的​​科學數法(例如1.2E 2)

                                                        的                                                                      地設定)

                                                  地                                                             %g - 較短的%e 與%f

#o                                                 %G - 較短的%E 與%f

#                                                                                                                                                                        %x - 十六進位數(小寫字母)

                                                             %X - 十六進位數(大寫字母)

                                                                 必需放置在 % 和字母之間(例如 %.2f):

                                                                                                                             ' (規定使用什麼作為填充,預設為空格它必須與寬度指定器一起使用。)

                                                                                                                                [0-9] (規定於變數值                                                 [0-9](規定小數位數或最大字串長度)

##                                                          

arg1

                                                                 地規定插入 

format

 字串中第一個 % 符號處的參數。

arg2                                                          必要。規定插到 format 字串中第二個 % 符號處的參數。

arg                                                         可選。規定插到 format 字串中第三、四等等 % 符號處的參數。

PHP printf() 函數


附錄:

syntax               /'sintœks/                          記錄

#manipulate       /məˈnɪpjuleɪt/          作業

##colon           

deprecate         /ˈdeprəkeɪt/             不贊成

#

以上是記錄學習PHP與mySQL的辛酸史的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jianshu.com。如有侵權,請聯絡admin@php.cn刪除