**章節導航**
[TOC]
## PHP標記
當解析一個文件時,PHP會尋找起始和結束標記,也就是<?php和?>,這告訴PHP開始和停止解析二者之間的 代碼。此種解析方式使得PHP可以被嵌入到各種不同的文檔中去,而任何起始和結束標記之外的部分都會被PHP解析器忽略。
<br/>PHP 也允許使用短標記 \*\*,但不鼓勵使用。只有通過激活 php.ini 中的 [short\_open\_tag](http://php.net/manual/zh/ini.core.php#ini.short-open-tag) 配置指令或者在編譯 PHP 時使用了配置選項 **\--enable-short-tags** 時才能使用短標記。
<br/>如果文件內容是純PHP代碼,最好在文件末尾刪除PHP結束標記。這可以避免在PHP結束標記之后萬一意外加入了空格或者換行符,會導致PHP開始輸出這些空白,而腳本此時并無輸出的意圖。
```
<?php
echo "Hello World":
// ... more code
echo "Last statement";
// 腳本至此結束,并無PHP結束符
```
## 從HTML中分離
凡是在一對開始和結束標記之外的內容都會被PHP解析器忽略,這使得PHP文件可以具備混合內容。可以使PHP嵌入到HTML文檔中去,如下例所示。
```
<p>This?is?going?to?be?ignored?by?PHP?and?displayed?by?the?browser.</p>
<?php?echo?'While?this?is?going?to?be?parsed.';??>
<p>This?will?also?be?ignored?by?PHP?and?displayed?by?the?browser.</p>
```
這將如預期中的運行,因為當PHP解釋器碰到?>結束標記時就簡單地將其后內容原樣輸出直到碰到下一個開始標記;例如是處于條件語句中間時,此時PHP解釋器會根據條件判斷來決定哪些輸出,,哪些跳過。
<br/>***Example*** #1 使用條件的高級分離術
```
<?php if($expression == true): ?>
This will show if the expression is true.
<?php else: ?>
Otherwise this will show.
<?php endif; ?>
```
上例中PHP將跳過條件語句 未達成的段落,即使該段落位于PHP開始和結束標記之外。由于PHP解釋器會在條件未達成時直接跳過該段條件語句塊,因此PHP會根據條件來忽略之。
要輸出大段文本時,跳出PHP解析模式通常必將文本通過[echo](http://php.net/manual/zh/function.echo.php) 或 [print](http://php.net/manual/zh/function.print.php) 輸出更有效率。
<br/>可以在 PHP 中使用四對不同的開始和結束標記。其中兩種,<?php ?>和`<script language="php"><script>` 總是可用的。另兩種是短標記和 ASP 風格標記,可以在 php.ini 配置文件中打開或關閉。盡管有些人覺得短標記和 ASP 風格標記很方便,但移植性較差,通常不推薦使用。
> **Note**:
> 此外注意如果將 PHP 嵌入到 XML 或 XHTML 中則需要使用 標記以保持符合標準。
***Example #2*** PHP開始和結束標記
```
1.??<?php?echo?'if?you?want?to?serve?XHTML?or?XML?documents,?do?it?like?this';??>
2.??<script?language="php">
????????echo?'some?editors?(like?FrontPage)?don\'t
??????????????like?processing?instructions';
????</script>
3.??<??echo?'this?is?the?simplest,?an?SGML?processing?instruction';??>
????<?=?expression??>?This?is?a?shortcut?for?"<??echo?expression??>"
4.??<%?echo?'You?may?optionally?use?ASP-style?tags';?%>
????<%=?$variable;?#?This?is?a?shortcut?for?"<%?echo?.?.?."?%>
```
上例中的 1 和 2 中使用的標記總是可用的,其中示例 1 中是最常用,并建議使用的。
<br/>短標記(上例 3)僅在通過 php.ini 配置文件中的指令 [short\_open\_tag](http://php.net/manual/zh/ini.core.php#ini.short-open-tag) 打開后才可用,或者在 PHP 編譯時加入了 **\--enable-short-tags** 選項。
<br/>ASP 風格標記(上例 4)僅在通過 php.ini 配置文件中的指令 [asp\_tags](http://php.net/manual/zh/ini.core.php#ini.asp-tags) 打開后才可用。
> **Note**:
> 在以下情況應避免使用短標記:開發需要再次發布的程序或者庫,或者在用戶不能控制的服務器上開發。因為目標服務器可能不支持短標記。為了代碼的移植及發行,確保不要使用短標記。
> **Note**:
> 在 PHP 5.2 和之前的版本中,解釋器不允許一個文件的全部內容就是一個開始標記 *<?php*。自 PHP 5.3 起則允許此種文件,但要開始標記后有一個或更多白空格符。
> **Note**:
> 自 PHP 5.4 起,短格式的 echo 標記 *<?=* 總會被識別并且合法,而不管 [short\_open\_tag](http://php.net/manual/zh/ini.core.php#ini.short-open-tag) 的設置是什么。
## 指令分隔符
同 C 或 Perl 一樣,PHP 需要在每個語句后用分號結束指令。一段 PHP 代碼中的結束標記隱含表示了一個分號;在一個 PHP 代碼段中的最后一行可以不用分號結束。如果后面還有新行,則代碼段的結束標記包含了行結束。
```
<?php
????echo?"This?is?a?test";
?>
<?php?echo?"This?is?a?test"??>
<?php?echo?'We?omitted?the?last?closing?tag';
```
> **Note**:
> 文件末尾的 PHP 代碼段結束標記可以不要,有些情況下當使用 [include](http://php.net/manual/zh/function.include.php) 或者 [require](http://php.net/manual/zh/function.require.php) 時省略掉會更好些,這樣不期望的空白符就不會出現在文件末尾,之后仍然可以輸出響應標頭。在使用輸出緩沖時也很便利,就不會看到由包含文件生成的不期望的空白符。
## 注釋
PHP 支持 C,C++ 和 Unix Shell 風格(Perl 風格)的注釋。例如:
```
<?php
????echo?"This?is?a?test";?//?This?is?a?one-line?c++?style?comment
????/*?This?is?a?multi?line?comment
???????yet?another?line?of?comment?*/
????echo?"This?is?yet?another?test";
????echo?'One?Final?Test';?#?This?is?a?one-line?shell-style?comment
?>
```
單行注釋僅僅注釋到行末或者當前的 PHP 代碼塊,視乎哪個首先出現。這意味著在 *// ... ?>* 或者 *\# ... ?>* 之后的 HTML 代碼將被顯示出來:?> 跳出了 PHP 模式并返回了 HTML 模式,*//* 或 *#* 并不能影響到這一點。如果啟用了 [asp\_tags](http://php.net/manual/zh/ini.core.php#ini.asp-tags) 配置選項,其行為和 *// %>* 或 *\# %>* 相同。不過,\*\* 標記在單行注釋中不會跳出 PHP 模式。
```
<h1>This?is?an?<?php?#?echo?'simple';?>?example</h1>
<p>The?header?above?will?say?'This?is?an??example'.</p>
```
C 風格的注釋在碰到第一個 *\*/* 時結束。要確保不要嵌套 C 風格的注釋。試圖注釋掉一大塊代碼時很容易出現該錯誤。
```
<?php
?/*
????echo?"This?is?a?test";?/*?This?comment?will?cause?a?problem?*/
?*/
?>
```
- 序言
- 簡介
- PHP是什么?
- PHP能做什么?
- 基本語法
- 類型
- boolean(布爾型)
- integer(整型)
- float(浮點型)
- string(字符串)
- array(數組)
- object(對象)
- callable(可調用)
- resource(資源)
- NULL(無類型)
- 偽類型
- 類型轉換的判別
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 來自PHP之外的變量
- 常量
- 語法
- 魔術常量
- 表達式
- 運算符
- 運算符優先級
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代語法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)