天天看點

PHP-基礎-1

基本文法

顯示變量的資料類型和值

var_dump()

<?php      $cars=array("Volvo","BMW","SAAB");     var_dump($cars);     ?>           

類定義

<?php     class Car     {       var $color;       function Car($color="green") {         $this->color = $color;       }       function what_color() {         return $this->color;       }     }     ?>           

字元串操作

strlen() 函數傳回字元串的長度,以字元計     strpos() 函數用于檢索字元串内指定的字元或文本     <?php     echo strpos("Hello world!","world");     ?>     #以上代碼的輸出是:6。           

設定常量

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

  1. 首個參數定義常量的名稱
  2. 第二個參數定義常量的值
  3. 可選的第三個參數規定常量名是否對大小寫不敏感。預設是 false。
#對大小寫敏感的常量     <?php     define("GREETING", "Welcome to W3School.com.cn!");     echo GREETING;     ?>     #對大小寫不敏感的常量     <?php     define("GREETING", "Welcome to W3School.com.cn!", true);     echo greeting;     ?>           

PHP 比較運算符

PHP 比較運算符用于比較兩個值(數字或字元串):

運算符 名稱 例子 結果
== 等于 $x == $y 如果 $x 等于 $y,則傳回 true。
=== 全等(完全相同) $x === $y 如果 $x 等于 $y,且它們類型相同,則傳回 true。
!= 不等于 $x != $y 如果 $x 不等于 $y,則傳回 true。
<> $x <> $y
!== 不全等(完全不同) $x !== $y 如果 $x 不等于 $y,或它們類型不相同,則傳回 true。
> 大于 $x > $y 如果 $x 大于 $y,則傳回 true。
< 小于 $x < $y 如果 $x 小于 $y,則傳回 true。
>= 大于或等于 $x >= $y 如果 $x 大于或者等于 $y,則傳回 true.
<= 小于或等于 $x <= $y 如果 $x 小于或者等于 $y,則傳回 true。

PHP 邏輯運算符

and $x and $y 如果 $x 和 $y 都為 true,則傳回 true。
or $x or $y 如果 $x 和 $y 至少有一個為 true,則傳回 true。
xor 異或 $x xor $y 如果 $x 和 $y 有且僅有一個為 true,則傳回 true。
&& $x && $y
|| $x
! !$x 如果 $x 不為 true,則傳回 true。

PHP 數組運算符

PHP 數組運算符用于比較數組:

+ 聯合 $x + $y $x 和 $y 的聯合(但不覆寫重複的鍵)
相等 如果 $x 和 $y 擁有相同的鍵/值對,則傳回 true。
全等 $x ===$y 如果 $x 和 $y 擁有相同的鍵/值對,且順序相同類型相同,則傳回 true。
不相等
不全等 如果 $x 與 $y 完全不同,則傳回 true。

PHP 條件語句

在您編寫代碼時,經常會希望為不同的決定執行不同的動作。您可以在代碼中使用條件語句來實作這一點。

在 PHP 中,我們可以使用以下條件語句:

  • if 語句 - 如果指定條件為真,則執行代碼
  • if...else 語句 - 如果條件為 true,則執行代碼;如果條件為 false,則執行另一端代碼
  • if...elseif....else 語句 - 選擇若幹段代碼塊之一來執行
  • switch 語句 - 語句多個代碼塊之一來執行
if (條件) {       條件為 true 時執行的代碼;     } elseif (condition) {       條件為 true 時執行的代碼;     } else {       條件為 false 時執行的代碼;     }           
<?php     switch ($x)     {     case 1:       echo "Number 1";       break;     case 2:       echo "Number 2";       break;     case 3:       echo "Number 3";       break;     default:       echo "No number between 1 and 3";     }     ?>           

for&foreach

<?php      for ($x=0; $x<=10; $x++) {       echo "數字是:$x <br>";     }      ?>     <?php      $colors = array("red","green","blue","yellow");      foreach ($colors as $value) {       echo "$value <br>";     }     ?>           

數組

  1. 數組基礎
    <?php     #定義數組     $cars=array("Volvo","BMW","SAAB");     #擷取數組長度     echo count($cars);     #關聯數組(類似于詞典)     $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");     $age['Peter']="35";     $age['Ben']="37";     $age['Joe']="43";     #周遊關聯數組     $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");     foreach($age as $x=>$x_value) {       echo "Key=" . $x . ", Value=" . $x_value;       echo "<br>";     }     ?>           
  2. 數組排序
    • sort() - 以升序對數組排序
    • rsort() - 以降序對數組排序
    • asort() - 根據值,以升序對關聯數組進行排序
    • ksort() - 根據鍵,以升序對關聯數組進行排序
    • arsort() - 根據值,以降序對關聯數組進行排序
    • krsort() - 根據鍵,以降序對關聯數組進行排序

超全局變量

PHP 中的許多預定義變量都是“超全局的”,這意味着它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以通路它們。

這些超全局變量是:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

$GLOBALS — 引用全局作用域中可用的全部變量

$GLOBALS 這種全局變量用于在 PHP 腳本中的任意位置通路全局變量(從函數或方法中均可)。

PHP 在名為 $GLOBALS[index] 的數組中存儲了所有全局變量。變量的名字就是數組的鍵。

<?php      $x = 75;      $y = 25;     function addition() {        $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];      }     addition();      echo $z;      ?>           

PHP $_SERVER

$_SERVER 這種超全局變量儲存關于報頭、路徑和腳本位置的資訊。

<?php      echo $_SERVER['PHP_SELF'];     echo "<br>";     echo $_SERVER['SERVER_NAME'];     echo "<br>";     echo $_SERVER['HTTP_HOST'];     echo "<br>";     echo $_SERVER['HTTP_REFERER'];     echo "<br>";     echo $_SERVER['HTTP_USER_AGENT'];     echo "<br>";     echo $_SERVER['SCRIPT_NAME'];     ?>           

能夠在 $_SERVER 中通路的最重要的元素:

元素/代碼 描述
$_SERVER['PHP_SELF'] 傳回目前執行腳本的檔案名。
$_SERVER['GATEWAY_INTERFACE'] 傳回伺服器使用的 CGI 規範的版本。
$_SERVER['SERVER_ADDR'] 傳回目前運作腳本所在的伺服器的 IP 位址。
$_SERVER['SERVER_NAME'] 傳回目前運作腳本所在的伺服器的主機名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE'] 傳回伺服器辨別字元串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL'] 傳回請求頁面時通信協定的名稱和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD'] 傳回通路頁面使用的請求方法(例如 POST)。
$_SERVER['REQUEST_TIME'] 傳回請求開始時的時間戳(例如 1577687494)。
$_SERVER['QUERY_STRING'] 傳回查詢字元串,如果是通過查詢字元串通路此頁面。
$_SERVER['HTTP_ACCEPT'] 傳回來自目前請求的請求頭。
$_SERVER['HTTP_ACCEPT_CHARSET'] 傳回來自目前請求的 Accept_Charset 頭( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] 傳回來自目前請求的 Host 頭。
$_SERVER['HTTP_REFERER'] 傳回目前頁面的完整 URL(不可靠,因為不是所有使用者代理都支援)。
$_SERVER['HTTPS'] 是否通過安全 HTTP 協定查詢腳本。
$_SERVER['REMOTE_ADDR'] 傳回浏覽目前頁面的使用者的 IP 位址。
$_SERVER['REMOTE_HOST'] 傳回浏覽目前頁面的使用者的主機名。
$_SERVER['REMOTE_PORT'] 傳回使用者機器上連接配接到 Web 伺服器所使用的端口号。
$_SERVER['SCRIPT_FILENAME'] 傳回目前執行腳本的絕對路徑。
$_SERVER['SERVER_ADMIN'] 該值指明了 Apache 伺服器配置檔案中的 SERVER_ADMIN 參數。
$_SERVER['SERVER_PORT'] Web 伺服器使用的端口。預設值為 “80”。
$_SERVER['SERVER_SIGNATURE'] 傳回伺服器版本和虛拟主機名。
$_SERVER['PATH_TRANSLATED'] 目前腳本所在檔案系統(非文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] 傳回目前腳本的路徑。
$_SERVER['SCRIPT_URI'] 傳回目前頁面的 URI。

PHP $_REQUEST

PHP $_REQUEST 用于收集 HTML 表單送出的資料。

下面的例子展示了一個包含輸入字段及送出按鈕的表單。當使用者通過點選送出按鈕來送出表單資料時, 表單資料将發送到 <form> 标簽的 action 屬性中指定的腳本檔案。在這個例子中,我們指定檔案本身來處理表單資料。如果您需要使用其他的 PHP 檔案來處理表單資料,請修改為您選擇的檔案名即可。然後,我們可以使用超級全局變量 $_REQUEST 來收集 input 字段的值:

<html>     <body>     <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">     Name: <input type="text" name="fname">     <input type="submit">     </form>     <?php      $name = $_REQUEST['fname'];      echo $name;      ?>     </body>     </html>           

PHP $_POST

PHP $_POST 廣泛用于收集送出 method="post" 的 HTML 表單後的表單資料。$_POST 也常用于傳遞變量。

下面的例子展示了一個包含輸入字段和送出按鈕的表單。當使用者點選送出按鈕來送出資料後,表單資料會發送到 <form> 标簽的 action 屬性中指定的檔案。在本例中,我們指定檔案本身來處理表單資料。如果您希望使用另一個 PHP 頁面來處理表單資料,請用更改為您選擇的檔案名。然後,我們可以使用超全局變量 $_POST 來收集輸入字段的值:

<html>     <body>     <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">     Name: <input type="text" name="fname">     <input type="submit">     </form>     <?php      $name = $_POST['fname'];      echo $name;      ?>     </body>     </html>           

PHP $_GET

PHP $_GET 也可用于收集送出 HTML 表單 (method="get") 之後的表單資料。

$_GET 也可以收集 URL 中的發送的資料。

假設我們有一張頁面含有帶參數的超連結:

<html>     <body>     <a href="test_get.php?subject=PHP&web=W3school.com.cn">測試 $GET</a>     </body>     </html>           

當使用者點選連結 "Test $GET",參數 "subject" 和 "web" 被發送到 "test_get.php",然後您就能夠通過 $_GET 在 "test_get.php" 中通路這些值了。

下面的例子是 "test_get.php" 中的代碼:

<html>     <body>     <?php      echo "Study " . $_GET['subject'] . " at " . $_GET['web'];     ?>     </body>     </html>           

$_GET VS $_POST

$_GET 是通過 URL 參數傳遞到目前腳本的變量數組。

$_POST 是通過 HTTP POST 傳遞到目前腳本的變量數組。

通過 GET 方法從表單發送的資訊對任何人都是可見的(所有變量名和值都顯示在 URL 中)。GET 對所發送資訊的數量也有限制。限制在大于 2000 個字元。不過,由于變量顯示在 URL 中,把頁面添加到書簽中也更為友善。

GET 可用于發送非敏感的資料。

注釋:絕不能使用 GET 來發送密碼或其他敏感資訊!

通過 POST 方法從表單發送的資訊對其他人是不可見的(所有名稱/值會被嵌入 HTTP 請求的主體中),并且對所發送資訊的數量也無限制。

此外 POST 支援高階功能,比如在向伺服器上傳檔案時進行 multi-part 二進制輸入。

不過,由于變量未顯示在 URL 中,也就無法将頁面添加到書簽。

函數

PHP 的真正力量來自它的函數:它擁有超過 1000 個内建的函數。

PHP 使用者定義函數

除了内建的 PHP 函數,我們可以建立我們自己的函數。

函數是可以在程式中重複使用的語句塊。

頁面加載時函數不會立即執行。

函數隻有在被調用時才會執行。

注釋:函數名能夠以字母或下劃線開頭(而非數字)。

注釋:函數名對大小寫不敏感。

提示:函數名應該能夠反映函數所執行的任務。

<?php     function writeMsg() {       echo "Hello world!";     }     writeMsg(); // 調用函數     ?>           

PHP 函數參數

可以通過參數向函數傳遞資訊。參數類似變量。

參數被定義在函數名之後,括号内部。您可以添加任意多參數,隻要用逗号隔開即可。

<?php     function familyName($fname) {       echo "$fname Zhang.<br>";     }     familyName("Li");     familyName("Hong");     familyName("Tao");     familyName("Xiao Mei");     familyName("Jian");     ?>     #預設參數     <?php     function setHeight($minheight=50) {       echo "The height is : $minheight <br>";     }     setHeight(350);     setHeight(); // 将使用預設值 50     setHeight(135);     setHeight(80);     ?>           

日期函數

PHP date() 函數用于對日期或時間進行格式化。

PHP Date() 函數

PHP Date() 函數把時間戳格式化為更易讀的日期和時間。

文法

date(format,timestamp)           
參數
format 必需。規定時間戳的格式。
timestamp 可選。規定時間戳。預設是目前時間和日期。

注釋:時間戳是一種字元序列,它表示具體事件發生的日期和事件。

獲得簡單的日期

date() 函數的格式參數是必需的,它們規定如何格式化日期或時間。

下面列出了一些常用于日期的字元:

  • d - 表示月裡的某天(01-31)
  • m - 表示月(01-12)
  • Y - 表示年(四位數)
  • 1 - 表示周裡的某天

其他字元,比如 "/", "." 或 "-" 也可被插入字元中,以增加其他格式。

下面的例子用三種不同方法格式今天的日期:

<?php     echo "今天是 " . date("Y/m/d") . "<br>";     echo "今天是 " . date("Y.m.d") . "<br>";     echo "今天是 " . date("Y-m-d") . "<br>";     echo "今天是 " . date("l");     ?>           

使用 date() 函數在您的網站上自動更新版本年份:

© 2010-<?php echo date("Y")?>           

下面是常用于時間的字元:

  • h - 帶有首位零的 12 小時小時格式
  • i - 帶有首位零的分鐘
  • s - 帶有首位零的秒(00 -59)
  • a - 小寫的午前和午後(am 或 pm)

下面的例子以指定的格式輸出目前時間:

<?php     echo "現在時間是 " . date("h:i:sa");     ?>           

注釋:請注意 PHP date() 函數會傳回伺服器的目前日期/時間!

獲得時區

如果從代碼傳回的不是正确的時間,有可能是因為您的伺服器位于其他國家或者被設定為不同時區。

是以,如果您需要基于具體位置的準确時間,您可以設定要用的時區。

下面的例子把時區設定為 "Asia/Shanghai",然後以指定格式輸出目前時間:

<?php     date_default_timezone_set("Asia/Shanghai");     echo "目前時間是 " . date("h:i:sa");     ?>           

通過 PHP mktime() 建立日期

date() 函數中可選的時間戳參數規定時間戳。如果您未規定時間戳,将使用目前日期和時間(正如上例中那樣)。

mktime() 函數傳回日期的 Unix 時間戳。Unix 時間戳包含 Unix 紀元(1970 年 1 月 1 日 00:00:00 GMT)與指定時間之間的秒數。

mktime(hour,minute,second,month,day,year)           

下面的例子使用 mktime() 函數中的一系列參數來建立日期和時間:

<?php     $d=mktime(9, 12, 31, 6, 10, 2015);     echo "建立日期是 " . date("Y-m-d h:i:sa", $d);     ?>           

PHP strtotime() 函數

strtotime() 函數用于把人類可讀的字元串轉換為 Unix 時間。

strtotime(time,now)           

下面的例子通過 strtotime() 函數建立日期和時間:

<?php     $d=strtotime("10:38pm April 15 2015");     echo "建立日期是 " . date("Y-m-d h:i:sa", $d);     ?>           

PHP 在将字元串轉換為日期這方面非常聰明,是以您能夠使用各種值:

<?php     $d=strtotime("tomorrow");     echo date("Y-m-d h:i:sa", $d) . "<br>";     $d=strtotime("next Saturday");     echo date("Y-m-d h:i:sa", $d) . "<br>";     $d=strtotime("+3 Months");     echo date("Y-m-d h:i:sa", $d) . "<br>";     ?>           

不過,strtotime() 并不完美,是以請記得檢查放入其中的字元串。

更多日期執行個體

下例輸出下周六的日期:

<?php     $startdate = strtotime("Saturday");     $enddate = strtotime("+6 weeks",$startdate);     while ($startdate < $enddate) {       echo date("M d", $startdate),"<br>";       $startdate = strtotime("+1 week", $startdate);     }     ?>           

下例輸出七月四日之前的天數:

<?php     $d1=strtotime("December 31");     $d2=ceil(($d1-time())/60/60/24);     echo "距離十二月三十一日還有:" . $d2 ." 天。";     ?>           

檔案

<?php     $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");     echo fread($myfile,filesize("webdictionary.txt"));     fclose($myfile);     ?>           

檔案會以如下模式之一打開:

模式
r 打開檔案為隻讀。檔案指針在檔案的開頭開始。
w 打開檔案為隻寫。删除檔案的内容或建立一個新的檔案,如果它不存在。檔案指針在檔案的開頭開始。
a 打開檔案為隻寫。檔案中的現有資料會被保留。檔案指針在檔案結尾開始。建立新的檔案,如果檔案不存在。
x 建立新檔案為隻寫。傳回 FALSE 和錯誤,如果檔案已存在。
r+ 打開檔案為讀/寫、檔案指針在檔案開頭開始。
w+ 打開檔案為讀/寫。删除檔案内容或建立新檔案,如果它不存在。檔案指針在檔案開頭開始。
a+ 打開檔案為讀/寫。檔案中已有的資料會被保留。檔案指針在檔案結尾開始。建立新檔案,如果它不存在。
x+ 建立新檔案為讀/寫。傳回 FALSE 和錯誤,如果檔案已存在。

PHP 讀取檔案 - fread()

fread() 函數讀取打開的檔案。

fread() 的第一個參數包含待讀取檔案的檔案名,第二個參數規定待讀取的最大位元組數。

PHP 關閉檔案 - fclose()

fclose() 函數用于關閉打開的檔案。

注釋:用完檔案後把它們全部關閉是一個良好的程式設計習慣。您并不想打開的檔案占用您的伺服器資源。

fclose() 需要待關閉檔案的名稱(或者存有檔案名的變量)

PHP 讀取單行檔案 - fgets()

fgets() 函數用于從檔案讀取單行。

PHP 檢查 End-Of-File - feof()

feof() 函數檢查是否已到達 "end-of-file" (EOF)。

feof() 對于周遊未知長度的資料很有用。

下例逐行讀取 "webdictionary.txt" 檔案,直到 end-of-file:

<?php     $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");     // 輸出單行直到 end-of-file     while(!feof($myfile)) {       echo fgets($myfile) . "<br>";     }     fclose($myfile);     ?>           

PHP 讀取單字元 - fgetc()

fgetc() 函數用于從檔案中讀取單個字元。

PHP 建立檔案 - fopen()

fopen() 函數也用于建立檔案。也許有點混亂,但是在 PHP 中,建立檔案所用的函數與打開檔案的相同。

如果您用 fopen() 打開并不存在的檔案,此函數會建立檔案,假定檔案被打開為寫入(w)或增加(a)。

PHP 寫入檔案 - fwrite()

fwrite() 函數用于寫入檔案。

fwrite() 的第一個參數包含要寫入的檔案的檔案名,第二個參數是被寫的字元串。

<?php     $myfile = fopen("newfile.txt", "w") or die("Unable to open file!");     $txt = "Bill Gates\n";     fwrite($myfile, $txt);     $txt = "Steve Jobs\n";     fwrite($myfile, $txt);     fclose($myfile);     ?>           

PHP上傳與存儲檔案

<?php     /**      * Created by IntelliJ IDEA.      * User: zzd      * Date: 2018/3/1      * Time: 13:57      */     echo $_FILES["file"]["type"];     echo $_FILES["file"]["size"];     if ((($_FILES["file"]["type"] == "image/gif")             || ($_FILES["file"]["type"] == "image/jpeg")             || ($_FILES["file"]["type"] == "image/pjpeg"))         && ($_FILES["file"]["size"] < 300000))     {         if ($_FILES["file"]["error"] > 0)         {             echo "Error: " . $_FILES["file"]["error"] . "<br />";         }         else         {             echo "Upload: " . $_FILES["file"]["name"] . "<br />";             echo "Type: " . $_FILES["file"]["type"] . "<br />";             echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";             echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";             if (file_exists("upload/" . $_FILES["file"]["name"]))             {                 echo $_FILES["file"]["name"] . " already exists. ";             }             else             {                 move_uploaded_file($_FILES["file"]["tmp_name"],                     "upload/" . $_FILES["file"]["name"]);                 echo "Stored in: " . "upload/" . $_FILES["file"]["name"];             }         }     }     else     {         echo "Invalid file";     }     ?>           
ฅ平平庸庸的普通人ฅ