close

整理有關PHP的相關語法,這篇文章會不斷的更新,越新的內容會放在越上方,希望能幫忙到學php語法的朋友

(寒士呢~最近也在學php,我不是一個很厲害的程式設計師,不過我在學習的過程中,會把一些語法的重點還有使用方式放到上頭,希望可以幫忙到跟我一樣正在學PHP語言的朋友們!!!!)

這邊要進行一些文章的說明:

代表參考資訊(網站、書籍......等)

Q&A的解說(寒士覺得大家會有疑問的地方就會使用這個圖式)

§ 重點提醒

範例解說

 

 

 


9. 變數範圍:區域、全域、靜態、參數

宣告一個變數時,不須指定變數的型別( type ),PHP 會自動根據指派給該變數的值來判斷該變數的型別,雖然在宣告時不須指定變數的型別,但是必須指定變數的使用範圍。

  • 區域(local variable):
  1. 在 function 中宣告
  2. 只能在宣告的 function 中使用 (local scope)
  3. 不同的 function 中可宣告相同名稱的區域變數
  4. 在宣告變數 function 結束時,區域變數也就消滅了
  5. 宣告時不需使用任何關鍵字 (keyword)
  1. $a = 5;          //全域
  2. function myTest()
  3. {
  4. echo $a;       //區域
  5. }
  6. myTest();
$a在宣告中未指定值,所以輸出不出來
  • 全域(global variable):
  1. 在function外宣告
  2. 除了function中的script不能存取外,整個網頁中的 script 都可以存取該變數(global scope)
  3. 若要在function中使用全域變數,需使用關鍵字global,見下例在網頁關閉時,全域變數消滅
  1. $a = 5;
  2. $b = 10;
  3. function myTest()
  4. {
  5. global $a , $b ;  //注意這行
  6. $b = $a +$b;
  7. }
  8. myTest();
  9. echo $b;
$b會輸出$a+$b的值

global 變數一旦宣告之後,PHP 會將其放置在 $GLOBALS[index] 這個array中,其中index就是變數的名稱。我在可以從function內存取這個array,也可以直接指定值給array中的某個元素來改變其值。我們將上例改寫如下:

  1. $a = 5;
  2. $b = 10;
  3. function myTest()
  4. {
  5. $GLOBALS['b'] =$GLOBALS['a'] + $GLOBALS['b'];
  6. }
  7. myTest();
  8. echo $b;
  • 靜態(static variable):希望某區域變數不因函式結束而消滅,我們可以在第一次宣告該區域變數前,加上關鍵字static。

 

  1. static $ rememberMe;

每次呼叫該函數時,此變數都會包含上一次呼叫函數時所得到的值。

靜態變數是一種區域變數。

  • 參數(parameter,或稱 argument):參數指的是一種呼叫函式時傳入的區域變數。會在函式宣告時的參數列 (parameter list) 中被宣告。

 

  1. function myTest($para1,$para2,...)//在小括號中宣告
  2. {
  3. // 函式程式碼
  4. }

http://coyanlee.blogspot.tw/2012/04/php-local-global-static-parameter-scope.html


8. 全域變數VS超級全域變數

PHP提供了一系列的預設變數,這些預設變數都以陣列的形態存在,當中包含來自伺服器、作業環境與使用者輸入各種變數。

這些陣列會自動被設為全域變數,這些變數可以在任何地方拿來使用(例如:函數中可以直接使用,不需要用global關鍵字宣告),因為可以在任何地方使用也被稱為「自動全域變數」(Autoglobals)或「超級全域變數」(Superglobals)。

  • GET:給網址傳值的變數呼叫方法,$_GET
  • POST:給錶單傳值的變數呼叫方法,$_POST
    • GET請求特色:
    • 一般用在搜尋資料及各種更能連結(或按鈕)居多。
    • 會保留在瀏覽器的歷史紀錄中,可以被加入我的最愛或是書籤,方便再利用。
    • 應避免敏感資料使用,以免外洩。
    • 有長度限制,無法傳遞太多內容。
    • POST請求特色:
    • 不會被看到輸入的內容。
    • 傳遞的資料量沒有長度限制。

範例/Example

  • GET:
  • 我們網頁上有一篇文章,文章的編號為100,網頁網址為abc_ex.php。
    那麼網址傳值的方式:abc_ex.php?aid=100
    (問號後面是數變數的名稱和數值=>?變數=數值。)
  • 我們網頁上第二個分類中有一篇文章,文章的編號為50,網頁網址為abc_ex.php。
    那麼網址傳值的方式:abc_ex.php?category=2&aid=50
    (問號後面是變數的名稱和數值(多個變數時,要使用&將變數連接在一起)=>?變數=值&變數=值。)
  • 在PHP語言中,要抓取網址傳來的值時,使用$_GET。
    ($GET抓取變數內容的時候,程式碼為$_GRT['變數'])
  • POST:
  • 我們網頁上有個表單,這個表單需要使用者輸入帳號密碼,使用者填後資料送出後要抓取填入的資料。
  • 在PHP語言中,要抓取網址傳來的值時,使用$_POST。
    ($POST抓取變數內容的時候,程式碼為$_POST['變數'])

http://belleaya.pixnet.net/blog/post/30538510-%5B%E6%95%99%E5%AD%B8%5D-php-%E5%82%B3%E5%80%BC%E8%AA%9E%E6%B3%95---post%E5%92%8Cget%E7%9A%84%E7%94%A8%E6%B3%95

 

  • COOKIE:讓網站記住您的資訊,在下次造訪時,把你的資料挖出來進行比對,若沒問題就會登入,可以說為「記住我的帳號」功能,呼叫方法:$_COOKIE
  • SESSION:與COOKIE用途一樣。

§ COOKIE&SESSION比較:COOKIE存在於使用者電腦中(用戶端);SESSION存在於主機中(伺服器端),SESSION比COOKIE更為安全,無法輕易取得資料。

範例/Example

  • COOKIE
  • 在PHP語言中,要抓取網址傳來的值時,使用$_COOKIE。(程式碼為$_COOKIE['變數'])
  • 儲存於用戶端,可能有用戶端禁用cookie,但伺服器不需承擔計錄檔案的負荷。
  • SESSION
  • 在PHP語言中,要抓取網址傳來的值時,使用$_SESSION。
  • 儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔。
  • SESSION函式庫:
  • session_start:啟用一個新的或開啟正在使用中的session。
  • session_destroy:清除正在使用中的 session。
  • session_name:取得正在使用中的名稱或將名稱更新為新的名稱。
  • session_module_name:取得或更新正在使用中的模組。
  • session_save_path:存取目前使用中的 session 路徑。
  • session_id:存取目前使用中的 id。
  • session_register:註冊一組新的 session。
  • session_unregister:刪除一個正在使用中的 session。
  • session_is_registered:檢查目前使用中是否已經有此變數。
  • session_decode:資料解碼,解碼成功回傳 true。
  • session_encode:資料編碼,編碼成功回傳 true。

http://www.webtech.tw/info.php?tid=33

http://php.net/manual/en/reserved.variables.session.php

http://php.net/manual/en/reserved.variables.cookies.php

  • REQUEST:可以接收由get、post、cookie所傳送的變數,呼叫方法:$_REQUEST

範例/Example

  • 在PHP語言中,要抓取網址傳來的值時,使用$_REQUEST。(程式碼為$_REQUEST['變數'])

http://php.net/manual/zh/reserved.variables.request.php

http://knowledge.j2h.net/bbs16/547.html

http://yhhuang1966.blogspot.tw/2015/05/php-get-post-request.html

實戰PHP7+MySQL 從0開始寫出自己想要寫的程式 4-12頁(4.2.3.1章節)

  • GLOBALS:用來取得全域變數的方式,呼叫方法:$GLOBALS(§ 不用加上底線)

範例/Example

  • 在PHP語言中,要抓取網址傳來的值時,使用$GLOBALS。(程式碼為$GLOBALS['變數'])

http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8(variables)

http://php.net/manual/zh/reserved.variables.globals.php

  • SERVER:用來取得網頁伺服器的設定值,呼叫方法:$_SERVER
    下面來看看怎麼使用:

範例/Example

  • 在PHP語言中,要抓取網址傳來的值時,使用$_SERVER。
  • $_SERVER['HTTP_HOST']:當前請求的Host頭中的內容(與取得Server的Port)
  • $_SERVER['SERVER_NAME']:當前運行網頁檔案所在的主機名稱
  • $_SERVER['REQUEST_URI']:訪問此頁面需要的URL
  • $_SERVER['PHP_SELF']:當前正在執行的網頁檔案名稱
  • $_SERVER['QUERY_STRING']:查詢的變數值

$_SERVER['HTTP_HOST']:當前請求的Host頭中的內容(與取得Server的Port)
$_SERVER['SERVER_NAME']:當前運行網頁檔案所在的主機名稱
$_SERVER['REQUEST_URI']:訪問此頁面需要的URL
$_SERVER['PHP_SELF']:當前正在執行的網頁檔案名稱
$_SERVER['QUERY_STRING']:查詢的變數值
實作的網址是:http://jhsiao.dscloud.me:8080/server2.php?id=1798
$_SERVER['HTTP_HOST']: jhsiao.dscloud.me:8080
$_SERVER['SERVER_NAME']: jhsiao.dscloud.me
$_SERVER['REQUEST_URI']: /server2.php?id=1798
$_SERVER['PHP_SELF']: /server2.php
$_SERVER['QUERY_STRING']: id=1798
程式碼 顯示結果
<?php
    echo "HTTP_HOST:".$_SERVER['HTTP_HOST']."<hr />";
    echo "SERVER_NAME:".$_SERVER['SERVER_NAME']."<hr />";
    echo "REQUEST_URI:".$_SERVER['REQUEST_URI']."<hr />";
    echo "PHP_SELF:".$_SERVER['PHP_SELF']."<hr />";
    echo "QUERY_STRING:".$_SERVER['QUERY_STRING']."<hr />";
?>
HTTP_HOST: jhsiao.dscloud.me:8080
SERVER_NAME: jhsiao.dscloud.me
REQUEST_URI: /server2.php?id=1798
PHP_SELF: /server2.php
QUERY_STRING: id=1798

 

http://php.net/manual/en/reserved.variables.server.php

http://ithelp.ithome.com.tw/articles/10157282

  • FILES:用來上傳檔案的方式,呼叫方式$_FILES

範例/Example

  • 在PHP語言中,要抓取網址傳來的值時,使用$_FILES。
  • $_FILES["file"]["name"]:上傳檔案的原始名稱。
  • $_FILES["file"]["type"]:上傳的檔案類型。
  • $_FILES["file"]["size"]:上傳的檔案原始大小。
  • $_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。
  • $_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。

http://www.webtech.tw/info.php?tid=24

http://php.net/manual/en/reserved.variables.files.php

  • ENV:使用在命令模式下,會取得該主機執行環境,呼叫方式:$_ENV

範例/Example

  • 在PHP語言中,要抓取網址傳來的值時,使用$_ENV。
  • $_ENV['USER']:執行該命令的使用者是誰。

http://php.net/manual/en/reserved.variables.environment.php

實戰PHP7+MySQL 從0開始寫出自己想要寫的程式 4-18頁(4.5.8章節)


7. 變數宣告會使用「 $ 」來定義,第一個字元必須使用英文字(A-Z,a-z)或是底線( _ )。

變數命名方式需要兩個單以上單字組成,可以利用底線來組合兩個詞或是以駝峰式的命名方式命名,下面讓我們來看看怎麼使用:

  • 底線來組合兩個名詞:$shop_name
  • 駝峰式命名方式:$shopName、$ShopName

§ $this:$this看起來像個變數,擁有特別的作用,在PHP中無法被賦予值,所以不能使用$this來定義變數名稱。

§ 「 = 」不解釋為等於,而是將右邊的值指派或賦予左邊的變數

程式碼 顯示結果
  1. <?php
  2. $shop_name = "店鋪名字" ;
  3.  //$shop_name這個變數為店鋪名字
  4. echo "您好,歡迎光臨 {$shop_name}!";  
  5. #輸出 您好,歡迎光臨 店鋪名字!
  6. ?>
您好,歡迎光臨店鋪名字!

echo 字串時,字串前後都需要用引號包起來,若字串中有一個變數,再變數的前後必須加上「 {  } 」明確的將變數和字串隔開,避免程式執行時出現錯誤。


6. 程式碼在註解的部分分成兩個部分,一個是單行註解;另一個是多行註解。

下面我們來看看怎麼使用:

  • 單行註解:「 // 」、「 # 」。
  • 多行註解:「 /*...註解文字...*/ 」。
程式碼 顯示結果
  1. <?php
  2. echo "Hello World";       //輸出Hello World
  3. echo "Hello World H";    #輸出Hello World
  4. ?>
  5. /*echo輸出Hello World
  6. echo輸出Hello World
  7. echo輸出Hello World*/

Hello World

Hello World H

 


5. . 」字串的運算符號,用來連接字串和非字串(函數、變數、常數)。

(若不使用.來做連結的話,就要分開(分行)撰寫。)

程式碼 顯示結果
  1. <?php
  2. echo "現在時間是".date("Y-m-d H:i:s");
  3. ?>
現在時間是2016-09-05 12:04:09
  1. <?php
  2. echo "現在時間是";
  3. echo date("Y-m-d H:i:s")
  4. ?>

現在時間是

2016-09-05 12:04:09

date()是一個函數,()裡的文字是指定日期要格式化成為甚麼格式。

上面表格中date("Y-m-d H:i:s")格式為年-月-日 時:分:秒。


4. php語言中,常常需要輸入字串的時候,字串文字的前後需要使用引號來定義。

引號的定義中,我們通常會使用雙引號或是單引號兩種,下面我們來看看怎麼使用:

  • 單引號:字串文字 '
  • 雙引號:字串文字 "

3. 語言中若要輸出(印出、列印)在php中有兩種寫法,一種是echo;另一個是print。

  • echo用來輸出資料的語言結構(非函數),輸出後沒有回傳值。
  • print不是真函數,輸出成功會回傳True;失敗會回傳False,因為會回傳數值,所以可以做為一個普通的函數使用(需要去宣告變數)。

http://mming.pixnet.net/blog/post/27810575-%5Bphp%5Decho-and-print%E7%9A%84%E5%B7%AE%E7%95%B0


2. php語言中,程式碼必須放在<?php 與 ?>間,每一句語句結束後都需要加上「 ; 」符號代表結束。


1. php語言檔案的副檔名為「.php」,這個檔案可以是PHP語言、PHP語言結合HTML網頁標籤或是純HTML的網頁標籤。

在這邊朋友們應該會有疑問吧!!!純HTML的網頁標籤應該存成副檔名為.html的檔案,為什麼要存成.php的副檔名呢?.html無法執行php語言,.php可以同時跑PHP語言與網頁與法,但是.html只能跑網頁與法

 


實戰PHP7+MySQL 從0開始寫出自己想要寫的程式 吳弘凱著 松崗資產管理股份ˋ有限公司出版 ISBN:978-957-22-4565-1

arrow
arrow
    文章標籤
    php 語法
    全站熱搜

    shuhan19930920 發表在 痞客邦 留言(0) 人氣()