1,從 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 解釋器會根據條件判斷來決定哪些輸出,哪些跳過。
見下例,注意if 和 else 後面的 : 冒號
使用條件結構:
<?php if ($expression == true): ?>
This will show if the expression is true.
<?php else: ?>
Otherwise this will show.
<?php endif; ?>
上例中 PHP 將跳過條件語句未達成的段落,即使該段落位於 PHP 開始和結束標記之外。
由於 PHP 解釋器會在條件未達成時直接跳過該段條件語句塊,(:?> 跳出了 PHP 模式並返回了 HTML 模式) 因此 PHP 會根據條件來忽略之。
要輸出大段文本時,跳出 PHP 解析模式通常比將文本通過 echo 或 print 輸出更有效率。
<?php if(count($dataProvider->getData())):?>
<div id="down" style="display:block;">
<div>
<input type="button" id="exportexcel" class="button3" value=" 導出Excel " url="<?=Yii::app()->request->getUrl()?>">
<span id="downloadlink"></span></div>
</div>
<?php endif;?>
--------------------------------------------------------------------------------
2,指令分隔符
一段 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 或者 require 時省略掉會更好些,這樣不期望的空白符就不會出現在文件末尾,之後仍然可以輸出響應標頭。
在使用輸出緩沖時也很便利,就不會看到由包含文件生成的不期望的空白符。
<?php if(0): ?>
342432353
<?php else: ?>
otherwise this will show.
<?php endif ;
或者
<?php if(0): ?>
342432353
<?php else: ?>
otherwise this will show.
<?php endif ?>
--------------------------------------------------------------------------------
PHP注釋
<?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 模式,// 或 # 並不能影響到這一點。
C 風格的注釋在碰到第一個 */ 時結束。
<?php
/*
echo "This is a test"; /* This comment will cause a problem */
*/
echo 'kdfjal';
?>
將報錯,輸出空白
--------------------------------------------------------------------------------
String 字符串
一個字符串 string 就是由一系列的字符組成,其中每個字符等同於一個字節。這意味著 PHP 只能支持 256=2的8次方 的字符集,因此不支持 Unicode 。詳見字符串類型詳解。
Note: string 最大可以達到 2GB。
語法
一個字符串可以用 4 種方式表達:
單引號
雙引號
heredoc 語法結構
nowdoc 語法結構(自 PHP 5.3.0 起)
--------------------------------------------------------------------------------
單引號
定義一個字符串的最簡單的方法是用單引號把它包圍起來(字符 ')。
要表達一個單引號自身,需在它的前面加個反斜線(\)來轉義。
要表達一個反斜線自身,則用兩個反斜線(\\)。
其它任何方式的反斜線都會被當成反斜線本身:也就是說如果想使用其它轉義序列例如 \r 或者 \n,並不代表任何特殊含義,就單純是這兩個字符本身。
Note: 不像雙引號和 heredoc 語法結構,在單引號字符串中的變量和特殊字符的轉義序列將不會被替換。
<?php
echo 'this is a simple string';
// 可以錄入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// 輸出: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';
// 輸出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
// 輸出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
// 輸出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
// 輸出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
--------------------------------------------------------------------------------
雙引號
如果字符串是包圍在雙引號(")中, PHP 將對一些特殊的字符進行解析:
轉義字符
序列 含義
\n 換行(ASCII 字符集中的 LF 或 0x0A (10))
\r 回車(ASCII 字符集中的 CR 或 0x0D (13))
\t 水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\e Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
\f 換頁(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
\\ 反斜線
\$ 美元標記
\" 雙引號
\[0-7]{1,3} 符合該正則表達式序列的是一個以八進制方式來表達的字符
\x[0-9A-Fa-f]{1,2} 符合該正則表達式序列的是一個以十六進制方式來表達的字符
和單引號字符串一樣,轉義任何其它字符都會導致反斜線被顯示出來。PHP 5.1.1 以前,\{$var} 中的反斜線還不會被顯示出來。
用雙引號定義的字符串最重要的特征是變量會被解析,詳見變量解析。
--------------------------------------------------------------------------------
Heredoc 結構
第三種表達字符串的方法是用 heredoc 句法結構:<<<。在該運算符之後要提供一個標識符,然後換行。接下來是字符串 string 本身,最後要用前面定義的標識符作為結束標志。
結束時所引用的標識符必須在該行的第一列,而且,標識符的命名也要像其它標簽一樣遵守 PHP 的規則:只能包含字母、數字和下劃線,並且必須以字母和下劃線作為開頭。