2024 年 PHP 日本研討會

註解

PHP 支援「C」、「C++」和 Unix shell 風格 (Perl 風格) 的註解。例如:

<?php
echo 'This is a test'; // 這是單行 C++ 風格的註解
/* 這是多行註解
另一行註解 */
echo 'This is yet another test';
echo
'One Final Test'; # 這是單行 shell 風格的註解
?>

「單行」註解樣式僅會註解到該行的結尾或目前的 PHP 程式碼區塊,以先遇到的為準。這表示 // ... ?># ... ?> 之後的 HTML 程式碼「會」被輸出:?> 會跳出 PHP 模式並返回 HTML 模式,而 //# 無法影響這一點。

<h1>這是一個 <?php # echo 'simple';?> 範例</h1>
<p>上面的標題會顯示「這是一個範例」。</p>

「C 風格」註解會在遇到第一個 */ 時結束。請確保不要巢狀「C 風格」註解。如果您嘗試註解掉一大段程式碼,很容易犯這個錯誤。

<?php
/*
echo 'This is a test'; /* 這個註解會造成問題 */
*/
?>

新增註解

使用者貢獻的註解 11 則註解

J. Prettyman
10 年前
註解可以有各種形式和大小。它們各不相同,其用途完全取決於撰寫程式碼的人。然而,我嘗試在我的程式碼中保持一致性,這樣其他人就容易閱讀。所以像這樣的東西可能會有幫助…

<?php

//======================================================================
// 類別 大字體
//======================================================================

//-----------------------------------------------------
// 子類別 較小字體
//-----------------------------------------------------

/* 標題 這裡請注意第一個字母是大寫 */

# 選項 1
# 選項 2
# 選項 3

/*
* 這是詳細說明
* 需要
* 數段資訊的東西。
*/

// 這是單行註解。
?>
M Spreij
19 年前
混合使用兩種註解樣式可以很好地切換程式碼區塊的註解狀態
<?php
//*
if ($foo) {
echo
$bar;
}
// */
sort($morecode);
?>

現在,只要將第一行的 / 移除…

<?php
/*
if ($foo) {
echo $bar;
}
// */
sort($morecode);
?>
..程式區塊突然被註釋掉了。
這是因為 /* .. */ 會覆蓋 //。你甚至可以像這樣「翻轉」兩個程式區塊
<?php
//*
if ($foo) {
echo
$bar;
}
/*/
if ($bar) {
echo $foo;
}
// */
?>
vs
<?php
/*
if ($foo) {
echo $bar;
}
/*/
if ($bar) {
echo
$foo;
}
// */
?>
aetonsi
1 年前
從 PHP 8 開始,完全以「#[」開頭的單行註釋具有特殊含義:它們被視為「屬性」,並且必須遵守預期的語法。參見:https://php.dev.org.tw/manual/en/language.attributes.php

因此,以下程式碼在 PHP 8+ 中會拋出錯誤,而在 PHP <8 中則完全有效
<?php
#[~~my super cool comment~~~]
?>

為了安全起見,請始終使用「//」註釋而不是「#」。也許在未來,「#」註釋會有其他特殊含義,誰知道呢。
magnesium dot oxide dot play+php at gmail dot com
11 年前
值得一提的是,HTML 註釋在 PHP 解析器中沒有任何意義。所以,

<!-- comment
<?php echo some_function(); ?>
-->

會執行 some_function() 並在 HTML 註釋內顯示結果。
hcderaad at wanadoo dot nl
19 年前
PHP 中的註釋可以用於多種用途,一個非常有趣的功能是您可以使用 PHPDocumentor (http://www.phpdoc.org/) 直接從註釋生成 API 文件。

因此,必須使用類似 JavaDoc 的註釋語法(符合 DocBook DTD),例如
<?php
/**
* 第二個 * 開啟了 DocBook 註釋區塊,這可以在後續<br>
* 的開發週期中節省您大量的時間,避免您不得不重寫<br>
* 主要文件部分以產生一些可用的文件形式。
*/
?>
這種格式支援一些基本的 html 格式(例如 <br> 標籤)來建立佈局。
J Lee
18 年前
MSpreij (2005 年 5 月 8 日) 說 /* .. */ 會覆蓋 //
匿名 (2006 年 1 月 26 日) 說 // 會覆蓋 /* .. */

實際上,兩者都是正確的。一旦註釋被開啟,*所有*內容都會被忽略,直到到達註釋的結尾(或 PHP 區塊的結尾)。

因此,如果註釋以
// 開頭,則 /* 和 */ 會被「覆蓋」,直到行尾
/* 開頭,則 // 會被「覆蓋」,直到 */ 之後
Steve
19 年前
註釋正規表達式時要小心。

例如,以下程式碼會導致解析錯誤。

我還是比較喜歡用 # 作為正規表達式分界符,這樣就不會對我造成影響 ;-)

<?php

/*

$f->setPattern('/^\d.*/
');

*/

?>
theblazingangel at aol dot com
17 年前
有些人可能不太清楚,但以下程式碼會造成解析錯誤! //?> 中的 ?> 不會被視為註釋文字,這是為了處理單行程式碼,例如 <?php echo 'something'; //comment ?>
的結果。
<?php
if(1==1)
{
//?>
}
?>

我是在用 // 樣式的註釋註釋掉一行包含正規表達式的程式碼時發現這個「異常」的,而該正規表達式本身就包含了 ?>。
例如 //preg_match('/^(?>c|b)at$/', 'cat', $matches);
即使被註釋掉,還是會造成錯誤!使用 /**/ 樣式的註釋可以解決這個問題。我不了解 # 樣式的註釋,我個人從來不用它。
jballard at natoga dot com
13 年前
註釋並不會消耗處理效能。

所以,所有那些認為註釋不必要,因為它們會佔用處理效能的人,現在沒有理由不寫註釋了 ;)

<?php

// 控制
echo microtime(), "<br />"; // 0.25163600 1292450508
echo microtime(), "<br />"; // 0.25186000 1292450508

// 測試
echo microtime(), "<br />"; // 0.25189700 1292450508
# TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
# .. 以上註釋重複 18809 次 ..
echo microtime(), "<br />"; // 0.25192100 1292450508

?>

它們花費的時間大致相同(大致相同的意思是,在重複測試中,控制組和測試組之間的差異有時是負的,有時是正的)。
Wolfsbay at ya dot ru
14 年前
如果您使用帶有程式碼高亮顯示的編輯器,就更容易注意到像 /* */ */ 這樣的錯誤。
fun at nybbles dot com
18 年前
我在所有語言中都使用過一個技巧,可以暫時屏蔽掉大段程式碼(通常用於測試/除錯/新功能),就是在頂部設定(或定義)一個變數,並使用該變數有條件地註釋掉程式碼區塊;與 if(0)(samuli 在 2005 年 11 月的評論)相比,這樣做還有一個額外的好處,就是您可以同時執行多個版本或測試,而且如果您想保留這些程式碼區塊,以後也不需要清理:只需重設變數即可。

就我個人而言,我更多地使用這種方法來有條件地包含新功能測試的程式碼,而不是屏蔽掉程式碼……不過,嘿,每個人都有自己的方法 :)

這也是我知道的唯一一種在任何語言中安全地巢狀註釋的方法,而且如果條件變數放在 include 中,對於多檔案使用也非常方便 :)

例如,放在檔案頂部

<?php $ver3 = TRUE;
$debug2 = FALSE;
?>

然後在檔案更深處

<?php if ($ver3) {
print(
"這段程式碼會被包含,因為我們正在測試版本 3");
}
?>

<?php if ($debug2) {
print(
"這段程式碼被『註解』掉了");
}
?>
To Top