畢業設計 之 五 PHP語法學習筆記

畢業設計 之 四 PHP語法學習筆記


做者:20135216
平臺:windows10
軟件:XAMPP,DreamWeaver
說明:該筆記是對網站編程語言的詳細學習

1、PHP基礎

0. 關於環境

  1. Apache
  2. PHP
  3. MySQL

1.關於_END標籤

  1. 用途:相似於「」,用於多行輸出
  2. 語法規則:
    • <<<_END……_END;
    • 注意:用於關閉標籤的_END標籤必須單獨放在一行,這一行中不能添加其餘內容(註釋也不能夠)
  3. 練習

2.關於局部變量

  1. 定義:在函數內建立的變量,默認狀況下均爲局部變量
  2. 特色:
    • 局部變量在函數返回調用處便被清空。一樣地,函數外建立的變量對於函數來講只能被非函數的代碼訪問(要想被函數訪問,能夠做爲參數傳遞進去)
  3. 舉例

3.全局變量&靜態變量

  1. 定義:全部的代碼都可以訪問的變量爲全局變量;只能在函數內部、下此函數被調用的時候仍然保存着值得變量,稱爲靜態變量
  2. 語法
    • 全局變量:global [變量名]
    • 靜態變量:static [變量名]

4.PHP類型轉換

  1. (array)轉換成數組
  2. (object)轉換成對象

2、PHP函數

1.執行順序

  1. 以print(abs(5-8))爲例。PHP從內而外執行,先計算5-8,獲得-3,而後調用abs(-3)獲得3,最後將3轉換爲字符串再輸出
  2. 返回一個數組
    • 用途:從一個函數中獲得多個值
    • 舉例:

2.關於引用

  1. 引用即在變量前加上&,表示一組值能夠被多個函數訪問或者修改
  2. 5.3之後的PHP再也不支持這樣的引用。出於替代,能夠在函數內聲明全局變量,便於讓函數訪問內部變量

3.包含和請求

  1. include 「[.php文件名]」:載入該文件的全部內容
  2. 進階版本是include_once 「[.php文件名]」:保證一個.php文件只會被載入一次
  3. 進階版+是require_once 「[.php文件名]」:不只有進階版的效果,還會保證導入的是已經存在的文件

4.版本兼容

  1. 使用function_exits函數,能夠檢測預約義/自定義的函數是否有效
  2. 使用phpversion函數,查看代碼正運行在哪一個版本的PHP上

3、PHP對象

1.對象

  1. 在使用對象以前,必須使用class關鍵字定義一個類。類定義包含類名(大小寫敏感)、屬性以及方法。
  2. 舉例

2.對象克隆

  1. 舉例
    $object2 = clone $object1;
  2. 目的
    • 避免兩個引用指向同一個對象。克隆出來的新實例與原來的實例徹底同樣

3.方法&靜態方法

  1. 通常方法php

    <?php
     class User
     {
     public $name,$password;
     function get_password()
     {
     return $this->password;
     }
     }
     ?>
  2. 靜態方法
    • 靜態方法不能訪問任何對象屬性,只可以被類調用(而不是被對象)
    • 示例html

      <?php
        User::pwd_string();//::表示伴隨靜態方法的自調用
        class User
        {
        static function pwd_string()
        {
        echo "Please enter your password";
        }
        }
        ?>
  3. 做用域
    • public:也是變量默認的屬性。
    • protected:這些屬性及方法只可以被對象的類方法及其子類引用
    • private:這些成語只可以被同一個類中的方法引用,而非子類
  4. 補充
    • 類中的屬性能夠賦予默認值,這個默認值能夠是一個數字或者字符串,但不可以是函數或者表達式
    • 類內能夠定義常量linux

      <?php
        Translate::lookup();
        class Translate
        {
        const ENGLISH = 0;
        const SPANISH = 1;
        const FRENCH = 2;
        }
        static function lookup()
        {
        echo self::SPANISH;//self加上::能夠直接引用常量
        }
        }
        ?>

4.繼承

  1. extends操做符
    • 示例
    • 代碼web

      <?php 
            $object = new Subscriber;
            $object->name = "Fred";
            $object->password = "pword";
            $object->phone = "012 345 678";
            $object->email = "fred@bloggs.com";
            $object->display();
            class User
            {
                public $name,$password;
                function save_user()
                {
                    echo "Save User code goes here";
                }
            }
            class Subscriber extends User
            {
                public $phone,$email;
                function display()
                {
                    echo "Name:" . $this->name . "<br>";
                    echo "Pass:" . $this->password . "<br>";
                    echo "Phone:" . $this->phone . "<br>";
                    echo "Email:" . $this->email;
                }
            }
        ?>
  2. parent運算符
    • 目的:當子類與父類定義了相同名字的方法的時候,子類方法將覆蓋父類方法。爲了訪問父類方法,則可使用parent方法
    • 示例
  3. final方法
    • 用在父類的方法以前,用於防止子類覆蓋父類方法

4、PHP數組

1.賦值

  1. 數組關鍵字
    • 用「下標=>值」的方法,將值賦給對應的下標(而不是變量)
    • 示例編程

      <?php 
        $p1 = array("Copier","Inkjet","Laser","Photo");
        echo "p1 element:" . $p1[2] . "<br>";
        $p2 = array('copier' => "Copier & Multipurpose",
                    'inkjet' => "Inkjet Printer",
                    'laser' => "Laser Printer");//這裏p1與p2是不一樣的數組
        echo "p2 element: ". $p2['inkjet'] . "<br>";
        ?>

  2. foreach...as循環
    • 示例windows

      <?php
        $paper = array('copier' => "Copier & Multipurpose",
                        'inkjet' => "Inkjet Printer",
                        'laser' => "Laser Printer");
        foreach($paper as $item -> $description)
            echo "$item:$description<br>";
        ?>
    • 說明
      • 當PHP遇到foreach語句時,讀取數組中的第一個元素並放入as關鍵字後的變量中,每當控制流返回到foreach語句,下一個元素被放到as關鍵字中。在全部值都被使用以後,循環結束執行

2.函數

  1. is_array函數:檢查變量是否爲數組
  2. count函數:統計頂層元素數量。若是要知道一個多維數組到底有多少元素,可使用count($fred,1)(後面那個參數只能是0或1)
  3. sort函數:在提供的源數組上直接進行排序,而不返回排序後的新數組。該函數排序成功返回true、排序失敗返回false。
    • sort($fred,SORT_NUMERIC):強制按照數值排序
    • sort($fred,SORT_STRING):強制按照字符串排序
    • PS:resort函數按照相反順序對源數組進行排序
  4. shuffle函數:按照隨機順序排序。也是直接在源數組上排序
  5. explode函數:接受一個由單個字符(或者字符串)分割成幾個獨立項構成的字符串,並將這些項放入一個數組。
    • 示例數組

      <?php
        $temp = explode(' ',"This is a sentence with seven words");
        print_r($temp);
        ?>

  6. compact函數
    • 做用:經過變量及其值來建立數組
    • compact函數須要將接收的變量名用引號引發,不是由$符號開頭的變量。
    • 示例瀏覽器

      <?php
        $j = 23;
        $temp = "Hello";
        $address = "1 Old Street";
        $age = 61;
      
        print_r(compact(explode(' ','j temp address age')));
        ?>

  7. end與reset函數
    • end函數將PHP內部指針移動到數組的最後一個元素 ;rest函數將PHP內部指針移動到數組的第一個元素
    • 好比,echo reset($fred);打印fred數組的第一個元素

5、實用PHP技術

1.printf函數

  1. 轉換字符
    • %b:二進制整數
    • %c:ASCII字符
    • %o:八進制整數
    • %x:十六進制(小寫)數
  2. 精確度設置服務器

    <?php
     echo "<pre>";//使得空格能顯示
     printf("The result is $%15f\n",123.42/12);//將結果填充到15位
     printf("The result is $%015f\n",123.42/12);//使用0,將結果填充到15位
     printf("The result is $%15.2f\n",123.42/12);//將結果填充到15位,小數點以後精確2位
     printf("The result is $%'#15.2f\n",123.42/12);//將結果用#填充到15位,小數點以後精確2位
     ?>
     ![](http://i.imgur.com/wbkkRaN.png)
  3. 字符串填充編程語言

    <?php
     echo "<pre>";//使得空格能顯示
     $h = 'Rasmus';
     printf("[%s]\n",$h);//標準格式輸出
     printf("[%12s]\n",$h);//利用空格右對齊,輸出長度爲12
     printf("[%-12s]\n",$h);//利用空格左對齊
     $d = 'Rasmus Lerdorf';
     printf("[%12.8s]\n",$d);//右對齊,長度爲12,截取8個字符
     printf("[%-12.12s]\n",$d);//左對齊,長度爲12,截取12個字符
     printf("[%-'@12.10s]\n",$d);//左對齊,長度爲12,用@填充
     ?>
     ![](http://i.imgur.com/R7PbWn4.png)
  4. 使用sprintf
    • 目的:將結果傳遞給變量而不是瀏覽器
    • 用法

      $hexstring = sprintf("%x%x%x",65,127,245);//以字符串形式返回RGB顏色組65,127,245的十六進制值,並將結果保存在$hexstring中

2.日期函數

  1. date函數
    • 目的:顯示多種格式的日期數據
    • 格式
      date($format,$timestamp):第一個參數是一個字符串,指的是格式化標識符;第二個參數是一個Unix時間戳
    • 舉例

      <?php
        echo date("l F jS , Y - H:ia",time());
        //l表示每週的日期全稱
        //F表示月份
        //j表示每個月的日期
        //S表示每個月中日期的後綴
        //Y表示年份,四位數
        //H表示天天的小時,24小時制,有前導0
        //i表示分
        //a表示午前或午後
        //time()表示當前時間戳
        ?>

  2. checkdate函數
    • 目的:檢查一個輸入的日期是否有效
    • 用法:

3.文件函數

  1. 首先明確一點,由於編寫PHP代碼的時候並不知道所要應用的系統是不是大小寫敏感的(好比,windows和Mac OS X系統大小寫不敏感,而linux和Unix是大小寫敏感的),所以要設定爲大小寫敏感,並將文件一概命名爲小寫
  2. 檢測文件是否存在
    • 用法:

      if(file_exits("testfile.txt"))
            echo "File exits";
  3. 建立文件
    • 用法:
      • fopen函數參數'w'表示打開已存在文件或者建立新文件;可是打開已存在的文件會使得原有內容被刪除
      • 這裏我還發現了一個有意思的事情:當我不當心把_END的位置寫在兩個tab鍵以後的時候,程序會報錯
  4. 從文件中讀取數據
    • fgets:從文件中獲取一整行數據
      • 舉例:
    • fread:從文件中獲取多行數據或者多行中的部分數據
      • 舉例
        • 由於我這裏用的是中文的「:」,而一箇中文字符是4個二進制代碼,因此若是隻讀取八個二進制碼的話,引號解析不出來(就是亂碼)。而後擴展到10個的話,就能夠把「:」讀取出來
  5. 複製文件
    • copy('[原文件]','[新文件]');
  6. 重命名文件或者目錄
    • rename('[舊文件名]','[新文件名]');
  7. 刪除文件
    • unlink('[原有文件]');
  8. 更新文件
    • 舉例

      <?php
        $fh = fopen("exercise2.txt",'r+') or die("Failed to open file");
        $text = fgets($fh);
        fseek($fh,0,SEEK_END);
        fwrite($fh,$text) or die("Could not write to file");
      
        fclose($fh);
        echo "File 'exercise2.txt' successfully update";        
        ?>
    • 說明
      • fseek函數的第二個參數和第三個參數表示文件指針指向的具體位置。第三個參數位置有三種選擇:
        • SEEK_END:移動到文件末尾
        • SEEK_CUR:將文件指針指向當前位置並在此基礎上偏移給定的偏移量(向後移動)
        • SEEK_SET:將指針移動到第二個參數標識的位置
  9. 多用戶訪問時爲文件加鎖之flock函數
    • 目的:將全部用戶的文件訪問請求排成隊列,直到程序釋放了鎖才解散隊列
    • 注意:flock函數不爲老版本的windows系統支持;此外,flock僅僅對其餘調用它的進程上鎖,若是修改代碼在沒有實現flock文件加鎖的狀況下進入文件並對其進行修改,此時代碼所作的修改一樣會覆蓋處於鎖定狀態的進程所作的修改
    • 舉例(對上段代碼的改進)
      <?php
      $fh = fopen("exercise2.txt",'r+') or die("Failed to open file");
      $text = fgets($fh);
      if(flcok($fh,LOCK_EX))//排他鎖,今後刻開始,其餘進程不能向文件中寫入和讀取數據
      {
      fseek($fh,0,SEEK_END);
      fwrite($fh,$text) or die("Could not write to file");
      flock($fh,LOCK_UN);//釋放排他鎖,其餘程序可使用該文件
      }
      fclose($fh);
      echo "File 'exercise2.txt' successfully update";
      ?>
  10. 讀取整個文件
    • 函數:file_get_contents("[文件名]");
    • 補充:除了讀取本地文件,還能夠從internet服務器上取回一份文件,就像在瀏覽器張瀏覽該頁面同樣
    • 舉例

      <?php
        echo file_get_contents("http://www.cnblogs.com/lwr-/p/6349948.html");   
        ?>
      • 個人Dreamweaver中沒有安裝flash插件,因此圖片沒加載出來
  11. 提交文件
    • 代碼示例:

      <?php
        echo <<<_END
        <html><head><title>PHP Form Upload</title></head><body>
        <form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
        Select file:<input type = 'file' name = 'filename' size = '10'>
        <input type = 'submit' value = '上傳'>
        </form>
        _END;
        if($_FILES)
        {
            $name = $_FILES['filename']['name'];
            move_uploaded_file($_FILES['filename']['tmp_name'],$name);
            echo "Uploaded image '$name'<br /><img src = '$name'>";
        }
        echo "</body></html>";
        ?>
    • 效果

    • 解析
      • form表單用POST提交數據,將數據提交的目標設定爲exercise2.php,並告訴web瀏覽器用multipart/form data的MIME類型編碼
      • 表單創建後,下一行輸出提示內容「Select File:」,而後須要兩個輸入。第一個是用於輸入文本的文本框,類型定義爲file,文件名爲filename(寬度爲10個字符)。第二個被要求的輸入只用於顯示「上傳」按鈕
      • 上傳的全部文件都被放入$_FILE中;一旦程序意識到有文件被上傳,從上傳文件的電腦中讀取的實際文件名便會被檢索出來,並存儲到變量$name中。
      • move_uploaded_file函數將被上傳的文件從臨時存儲文件位置轉移到一個永久存儲文件的目錄中;將文件原先的名字傳遞給該函數,一併存儲到當前目錄中。
      • $_FILES數組有五個值
        • $_FILES['file']['name']:上傳文件的名字
        • $_FILES['file']['type']:文件的類型
        • $_FILES['file']['size']:文件的大小
        • $_FILES['file']['tmp_name']:存儲在服務器上臨時文件的名字
        • $_FILES['file']['error']:上傳文件致使的錯誤代碼
    • 改進
      • 主要是防止用戶的惡意輸入,因此對上傳文件的類型進行了限制和控制
      • 代碼

        <?php
          echo <<<_END
          <html><head><title>PHP Form Upload</title></head><body>
          <form method = 'post' action = 'exercise2.php' enctype = 'multipart/form-data'>
          Select a JPG,GIF,PNG,TIF file:<input type = 'file' name = 'filename' size = '10'>
          <input type = 'submit' value = '上傳'>
          </form>
          _END;
          if($_FILES)
          {
              $name = $_FILES['filename']['name'];
              switch($_FILES['filename']['type'])
              {
                  case 'image/ipeg':$ext = 'jpg';break;
                  case 'image/gif':$ext = 'gif';break;
                  case 'image/png':$ext = 'png';break;
                  case 'image/tiff':$ext = 'tif';break;
                  default:$ext = '';break;
              }
              if($ext)
              {
                  $n = "image.$ext";
                  move_uploaded_file($_FILES['filename']['tmp_name'],$n);
                  echo "Uploaded image '$name' as '$n':<br>";
                  echo "<img src = '$n'>";
              }
              else
                  echo "'$name' is not an accepted image file";
        
          }
          else echo "No image has been uploaded";
          echo "</body></html>";
          ?>

參考

1.書籍

  1. 《PHP、MySQL與JavaScript學習手冊(第4版)》Robin Nixon著,侯榮濤 侯碩楠 韓進 譯

2.網址

  1. PHP date() 函數http://www.w3school.com.cn/php/func_date_date.asp
  2. PHP教程 http://www.w3school.com.cn/php/
相關文章
相關標籤/搜索