深入理解PHP原理之錯誤抑制與內嵌HTML分析

來源:互聯網
上載者:User

PHP提供了一個錯誤抑制符'@', 它是通過什麼方式來阻止錯誤輸出呢? 我又該在什麼時候使用它呢?
這是這倆天一些網友提到的共同問題, 今天就索性整體回答下, 備後來人翻閱.
PHP檔案內嵌HTML的處理方式
在PHP中, 所有在標籤外的字元, 在詞法分析過程中, 都會翻譯成T_INLINE_HTML token, 在文法分析的時候, 所有的T_INLIE_HTML都會被分配ZEND_ECHO輸出.
也就是說: 複製代碼 代碼如下:<?php
while($con) {
?>
laruence
<?php
}
?>

會產生一條OPLINE: T_ECHO, 而運算元是”laruence”;
就結果來說, 上面的代碼, 其實和下面的結果一樣: 複製代碼 代碼如下:<?php
while($con) {
echo "laruence";
}
?>

但有一個要注意的地方是, 對於PHP標籤外的字元, 在詞法分析過程中, 都會以400個字元為單位切分, 比如: 複製代碼 代碼如下:<?php
if(1) {
?>
laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence laruence
<?php
}
?>

上面的代碼中, 標籤外有531個字元(包含空格斷行符號), 會被分成倆條T_INLINE_HTML輸出.
錯誤抑制符
我們知道,在PHP中,可以通過錯誤抑制符來靜默錯誤提示, 那麼它是通過什麼方式呢?
在文法分析的過程中, 對於: 複製代碼 代碼如下:<?php
@include('file');
?>

會分別在include語句前後插入倆條Opline(操作), 這倆個操作分別做: 複製代碼 代碼如下:1. 儲存當前的error_reporting值, 並設定error_reporting(0); //關閉錯誤輸出
2. 恢複之前儲存的error_reporting值

也就是說, 其實上面的代碼, 和下面的代碼類似: 複製代碼 代碼如下:$old = error_reporting(0);
include('file');
error_reporting($old);

另外, 講一句題外話:”什麼時候才應用錯誤抑制呢?”, 我個人建議, 就是如果這條語句出錯了對你影響不大, 你也不關心這個錯誤是什麼, 你也不會安排額外的邏輯來處理這種錯誤, 那麼你可以使用錯誤抑制. 否則, 請你使用額外的邏輯來判斷錯誤.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.