2018-10-14

有關 PHP 檔案中的起啟標記 的使用

一開始在學 php 程式時,通常找到的教學資料都會說要在 *.php 中要寫 php 語言時,要用一個特有的標記 (tag) 將所寫的程式包起來,這樣將 php 檔案傳給 php engine 運行時才會做出程式碼所對應的行為…這個 tag 如下
<?php
?>
註:<?php 的 php 會因為 php.ini 是否有啟用 enable-short-tags 而增減,有啟用的話就只要輸入 <? 就好了

 這個 tag 跟在寫 jsp 或 classicASP 時會用 <% ... %> 在 *.jsp 或 *.asp 中的意義一樣,就是指在這個 tag 範圍內的是「程式語言」,而不是 html code。

不過我最近在網路上看到一些案子跟最近我自己正在改用 Visual Studio Code (簡稱 vscode) 來寫程式而裝了一個叫「php cs fixer」的套件時,發現一個狀況…感覺蠻特別的。

我在使用「php cs fixer」來美化排版 php 檔時,我會看到某一些 php 檔中結尾的標記符號「?>」消失了…我一開始以為是這個排版套件的異常,但因為不是所有的 php 檔都這樣,而是沒有和 html 語言混用的 php 檔才會這樣,所以我就上 google 翻資料。

後來在「PHP Manual」中找到「PHP tags」中有說明
If a file is pure PHP code, it is preferable to omit the PHP closing tag at the end of the file. This prevents accidental whitespace or new lines being added after the PHP closing tag, which may cause unwanted effects because PHP will start output buffering when there is no intention from the programmer to send any output at that point in the script.
大至上的說明是「如果檔案內容是純 php 程式碼的,最好是不要在檔案的最後使用結尾標記。其是為了避免不小心在結尾標記之後多輸入了空白符號或空行,以導致輸出了這一些無意義的東西。」

說是無意義,確實有時像網頁在編排或什麼的有時真的會有這類狀況…不過我本來以為會是安全的角度,看來是我想太多。



再來介紹「php cs fixer」是啥?

這是一個用來將寫好的 php 程式碼做排版格式美化的工具,詳細介紹可看開發者的 github ;雖然說身為一個開發人員,寫程式時本來就該養成良好排版的習慣,但是畢竟已經不是在用純文字檔在那邊農 code ,有輔助工具也可以幫忙是說也省一些心力…

「php cs fixer」用 vscode 裝套件是方便,但…一開始剛裝完其實在用 php 檔案時都會看到 vscode 報錯,一下說「php general error ...」,google 了一下說要指定「php-cs-fixer.phar」的位置,指定好後又出現「php executablepath not found」之類的…後來測了一下才知道照下列的方式來使用錯誤應該會比較少
  1. 先查到系統中 php enging 安裝的路徑,看是用 windows (找 php.exe 在哪) 或是用 linux (呃…這個不一定,要看你是 yum 或 apt 裝的,還是自己 compile 的),以下我用 windows 系統為例
  2. vscode 套件安裝 php cs fixer
  3. 打開 vscode 的 settings (vscode 左下角的齒輪可以找到 Settings 項目,或者 ctrl + , )
  4. 在「Settings」畫面找到「...」,點一下可以看到「Open settings.json」,就會打開「{...} User Settings」
  5. 「{...} User Settings」會分成兩欄,左欄是「DEFAULT USER SETTINGS」,這邊不能修改,右欄有兩個 Label ,一個叫「USER SETTINGS」,另一個叫「WORKSPACE SETTINGS」
  6. 在「USER SETTINGS」建立
     "php.executablePath": "C:\\php-root\\php.exe", /*指定 php.exe 的位置*/
     "php.validate.executablePath": "C:\\php-root\\php.exe", /*驗定 php 語法的 php.exe 位置(應該是這意思…)*/
     "php-cs-fixer.executablePath": "${extensionPath}\\php-cs-fixer.phar", /*指定 php-cs-fixer.phar 的位置,這邊指定 vscode php cs fixer 套件的安裝目錄下就自己會有 php-cs-fixer.phar 了*/
     "php-cs-fixer.formatHtml": true, /*啟用 html 格式美化*/
     "php-cs-fixer.onsave": true, /*啟用存檔時運行美化,如不啟用,要自己手動 shift + alt + f */
我自己後來測成功是上述步驟啦,理論上應該是都 ok ,如不行…就再 google 了…

沒有留言: