PHP 團隊在 2026 年 10 月 26 日更新 Windows 發行套件,提供 8.5.12-1、8.4.27-1、8.3.36-1 與 8.2.35-1。
2026-10-27 0 0
2026-10-27

PHP註釋的重要性 在程式設計中,註釋是一個重要元素,它可以幫助我們理解和解釋程式碼的功能。在PHP中,我們有多種方式可以添加註釋,這些註釋對於程式碼的維護和理解都有很大的幫助。 PHP註釋的種類 在PHP中,我們主要有三種類型的註釋: 單行註釋:以兩個斜線(//)或一個井號(#)開頭。 多行註釋:以斜線星號(/*)開頭,以星號斜線(*/)結尾。 文件註釋:以兩個星號斜線(/**)開頭,以星號斜線(*/)結尾,通常用於生成自動文檔。 如何使用PHP註釋 在PHP中使用註釋非常簡單,以下是一些範例: <?php // 這是一個單行註釋 # 這也是一個單行註釋 /* 這是一個多行註釋 可以跨越多行 */ /** * 這是一個文件註釋 * 通常用於生成自動文檔 */ ?> 註釋的重要性 註釋對於程式碼的維護和理解都有很大的幫助。它可以幫助我們記錄程式碼的功能和用途,也可以幫助其他開發者理解我們的程式碼。在複雜的項目中,註釋是必不可少的。
2023-12-25 4.59k 0
文尼先生 2023-12-25

PHP資料型態 在PHP程式語言中,資料型態是一個重要的概念,它定義了變數可以存儲的資料類型。PHP提供了多種資料型態,包括整數、浮點數、字串、布林值、陣列、物件、NULL和資源。 整數 整數是沒有小數的數字,可以是正數或負數。例如: <?php $a = 1234; // 正整數 $b = -123; // 負整數 $c = 0123; // 八進制數 (等於十進制的83) $d = 0x1A; // 十六進制數 (等於十進制的26) ?> 浮點數 浮點數是有小數點的數字,也可以是科學記數法。例如: <?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?> 字串 字串是字符的序列。在PHP中,可以使用單引號或雙引號來定義一個字串。例如: <?php $a = 'Hello world!'; $b = "Hello world!"; ?> 布林值 布林值是一種特殊的資料型態,只有兩個值:真(True)或假(False)。例如: <?php $a = true; $b = false; ?> 陣列 陣列是存儲多個值的一種資料結構。例如: <?php $cars = array("Volvo", "BMW", "Toyota"); ?> 物件 物件是存儲資料和對資料進行操作的一種資料結構。例如: <?php class Car { function Car()...
2023-12-25 1.46w 0
文尼先生 2023-12-25

PHP讀取JSON後得到null,不一定表示解碼失敗。JSON本身可以是一個合法的null;但格式錯誤時,預設的json_decode()也可能回傳null。若程式只寫「結果為null就報錯」,便會把有效資料當成錯誤。需要可靠區分時,可以用JSON_THROW_ON_ERROR,把解碼失敗交給JsonException處理。 這個問題容易出現在匯入檔案、第三方API回應及儲存JSON設定的功能裡。畫面只顯示「資料是空的」,站長卻不知道是服務正常回傳空值,還是資料傳到一半壞掉。先把語法解析與資料格式檢查拆開,錯誤訊息才會說到真正的問題。 合法null和壞掉的字串長得不一樣 JSON的null不需要引號,也沒有大括號。字串'null'交給json_decode後會成為PHP的null。相反,'{"name":}'缺少值,屬於無效JSON。預設解碼這兩者,都可能得到相同的null結果,只看回傳值無法分辨。 空字串也不是JSON的null。API回應沒有內容、HTTP請求失敗、檔案讀取失敗和伺服器回傳HTML錯誤頁,各自有不同原因;不能把它們先改成'null'再繼續處理。應先確認讀取或請求成功,再把真正拿到的字串交給解析器。 JSON也不只允許物件或陣列。像false、0和一段有雙引號包住的字串,都可以是合法值。因此「解碼沒有拋例外」只證明語法能解析,還不能證明資料符合某個API要求的物件結構。 用四組輸入看清差別 以下程式只使用合成字串,可儲存為case.php後在命令列執行。JSON_THROW_ON_ERROR自PHP7.3提供;本文的輸出來自PHP8.4.2。先用普通模式記錄錯誤,再用例外模式解析同一份資料。 <?php $cases = [ 'valid-null' => 'null', 'valid-object' => '{"name":"demo"}', 'broken' => '{"name":}', 'empty' => '', ]; foreach ($cases as $label => $raw) { $plain = json_decode($raw, true); $error = json_last_error(); printf("%s plain=%s error=%d\n", $label, var_export($plain, true), $error); try { $value = json_decode($raw, true, 512, JSON_THROW_ON_ERROR); echo "throw-mode: ", var_export($value, true), PHP_EOL; } catch (JsonException $e) { echo "throw-mode: JsonException code=", $e->getCode(), PHP_EOL; } } 合法null在普通模式的錯誤碼為0,例外模式仍然回傳null,沒有進入catch。合法物件會得到包含name的陣列。壞掉的字串與空字串在這組測試裡都得到語法錯誤碼4,例外模式則拋出JsonException。寫應用程式時應用JSON_ERROR_NONE等常數判斷,不要把這些數字硬寫成你的業務規則。 這樣你就能把「資料確實是null」與「資料無法解碼」放到不同分支。若對方的API規格允許null代表沒有設定,便可以在成功解析後處理這種狀態;若規格要求物件,則回報資料結構不符,而不是誤報語法壞掉。 把解析放在一個小的try區塊 try { $data =...
2026-10-04 63 0
文尼先生 2026-10-04

PHP echo和print語句 在PHP中,我們經常需要將資訊輸出到瀏覽器上。這時候,我們就需要使用到PHP的輸出語句。在PHP中,主要有兩種輸出語句,分別是echo和print。雖然這兩種語句在功能上非常相似,但在使用上還是有一些細微的差別。 echo語句 echo是一種語言結構,用於輸出一個或多個字串。echo沒有返回值,且可以輸出一個或多個字串。例如: <?php echo "Hello, world!"; ?> 這段程式碼會在瀏覽器上輸出"Hello, world!"。 print語句 print也是一種語言結構,用於輸出一個字串。print有一個返回值1,且只能輸出一個字串。例如: <?php print "Hello, world!"; ?> 這段程式碼也會在瀏覽器上輸出"Hello, world!"。 echo和print的差異 echo和print在大多數情況下可以互換使用,但還是有一些細微的差異。 echo可以輸出一個或多個字串,print只能輸出一個字串。 echo沒有返回值,print的返回值為1。 echo的速度略快於print。 選擇echo還是print 在實際開發中,選擇使用echo還是print主要取決於個人喜好和具體需求。如果需要輸出多個字串,或者追求程式運行速度,可以選擇使用echo。如果需要知道輸出是否成功,可以選擇使用print。 結語 總的來說,echo和print都是PHP中非常重要的輸出語句,理解它們的使用方法和差異,對於學習PHP有著至關重要的作用。
2023-12-25 5.15k 0
文尼先生 2023-12-25

PHP 於 2026 年 10 月 23 日發布 Session upload progress 補充公告,說明 CVE-2026-115560 的特殊設定風險。
2026-10-24 0 0
2026-10-24

把兩批文章標題放進陣列,用$left + $right合起來,結果右邊第一筆不見了。PHP陣列的加號是按鍵名做聯集,不是把所有值接到後面。兩邊有相同鍵名時,左邊的值會留下,右邊對應的值會被忽略。 兩個列表都從0開始,第一個鍵就撞上了 以下每段都是獨立PHP範例,可各自存成.php檔執行。註解列出預期輸出,資料只是示例字串。 <?php $left = ['header', 'footer']; $right = ['sidebar']; echo json_encode($left + $right), PHP_EOL; // ["header","footer"] echo json_encode(array_merge($left, $right)), PHP_EOL; // ["header","footer","sidebar"] left的鍵是0、1;right的鍵也是0。因此,sidebar與header搶的是同一個鍵,加號保留左邊的header,並不是按文字內容去除重複。若只是要把兩批列表依序接起來,array_merge會保留三個值,並把整數鍵從0重新編號。 字串鍵相同時,兩種寫法的優先順序相反 <?php $left = ['color' => 'blue', 'rows' => 12]; $right = ['color' => 'red', 'cache' => true]; echo json_encode($left + $right), PHP_EOL; // {"color":"blue","rows":12,"cache":true} echo json_encode(array_merge($left, $right)), PHP_EOL; // {"color":"red","rows":12,"cache":true} 加號保留左邊color的blue;array_merge則由後面的red覆蓋前面的值。右邊獨有的cache,在兩種結果裡都會出現。合併網站設定時,先決定同鍵衝突要由誰優先,再選寫法;交換左右位置也會改變結果。 這個例子只處理一層鍵值。巢狀設定裡若還有陣列,不能直接把它當成逐層遞迴合併。 數字是文章ID時,不要順手重編鍵名 <?php $left = [101 => 'Article A']; $right = [202 => 'Article B']; echo json_encode($left + $right), PHP_EOL; //...
2026-10-24 55 0
文尼先生 2026-10-24

PHP搜尋陣列時,明明第一項就是要找的商品代碼,程式卻顯示「找不到」?先看你是不是把array_search()的結果直接放進if。它回傳的是鍵,不是單純的成功或失敗:找到第一項時,鍵可能是整數0;沒找到才回傳布林值false。 先把回傳值印出來 用一個普通的商品代碼清單就能重現。將下面存成獨立PHP檔執行,先觀察var_dump顯示的型別。 <?php $codes = ['starter', 'pro', 'team']; $key = array_search('starter', $codes, true); var_dump($key); // int(0) if ($key) { echo "找到\n"; } else { echo "找不到\n"; // 這個判斷寫錯了 } 這裡搜尋已成功,問題出在後面的條件。整數0在布林判斷中會被當成false,所以不能用if ($key)辨認搜尋是否成功。也不要改成if (!$key)或$key == false,它們同樣會把0混進失敗分支。 只把布林false當成沒找到 需要拿回鍵來讀取或處理那一項時,明確比較回傳值是否為布林false。下面是可替換前例的完整版本。 <?php $codes = ['starter', 'pro', 'team']; $key = array_search('starter', $codes, true); if ($key !== false) { echo '找到鍵:' . $key . "\n"; echo '商品代碼:' . $codes[$key] . "\n"; } else { echo "找不到\n"; } 這次會輸出鍵0及商品代碼starter。找不到時則走else。如果要用unset($codes[$key])移除匹配項,也應放在這個成功分支裡;不要在確認結果前就把false拿去當陣列鍵,否則可能誤操作鍵0。 第三個參數true,解決的是型別匹配 array_search的第三個參數和後面的!== false各有用途。前者要求搜尋值與陣列項目型別一致,後者分清「找到鍵0」和「沒有找到」。加了第三個參數,仍不能省略結果判斷。 <?php $ids = ['12', 12];...
2026-10-14 68 0
文尼先生 2026-10-14

array_slice 切出文章後,原本的整數 ID 鍵名卻變成 0?用第四個參數保留鍵名,並分清位置偏移、字串鍵名與普通列表。
2026-11-05 0 0
2026-11-05

PHP 在 2026 年 9 月 24 日發布 8.2.34、8.3.35、8.4.26 與 8.5.11 安全更新。
2026-09-25 0 0
2026-09-25

2023-03-05 2.88k 0
文尼先生 2023-03-05
顯示驗證碼
沒有帳號?註冊  忘記密碼?