defined(string $constant_name): bool
truefalse注意:參數必須是字串形式的常數名稱,不可加 $ 符號。
<?php
define('APP_VERSION', '2.1.0');
define('DEBUG_MODE', true);
var_dump(defined('APP_VERSION')); // bool(true)
var_dump(defined('DEBUG_MODE')); // bool(true)
var_dump(defined('NON_EXISTENT')); // bool(false)
// 條件編譯風格
if (defined('DEBUG_MODE') && DEBUG_MODE) {
error_reporting(E_ALL);
ini_set('display_errors', '1');
}
?>
<?php
$prefix = 'DB_';
$env = 'PROD'; // 或 'DEV'
$constName = $prefix . $env . '_HOST';
if (defined($constName)) {
$host = constant($constName); // 取得常數值
echo "連線主機: $host";
} else {
throw new Exception("環境 $env 資料庫主機常數未定義");
}
?>
strrchr(string $haystack, string $needle): string|false
$haystack:被搜尋字串$needle:搜尋目標(單字元或字串)。若為整數,視為 ASCII 碼對應字元。回傳:從 $needle 最後一次出現位置(含本身)到字串結尾的子字串;找不到回傳 false。
<?php
$path = '/var/www/html/project/public/index.php';
// 1. 取得檔名(最後一個 / 之後)
$filename = strrchr($path, '/'); // '/index.php'
echo basename($filename); // 'index.php' (更推薦用 basename())
// 2. 取得副檔名(最後一個 . 之後)
$ext = strrchr($filename, '.'); // '.php'
// 3. 字串搜尋
echo strrchr('Hello world!', 'world'); // 'world!'
echo strrchr('Hello world!', 'o'); // 'orld!'
// 4. 整數參數視為 ASCII
echo strrchr('Hello world!', 111); // 'orld!' (111 = 'o')
// 5. 找不到
var_dump(strrchr('abc', 'z')); // bool(false)
?>
<?php
$dataUri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...';
// 取得 MIME 類型
$mimePart = strstr($dataUri, ';', true); // 'data:image/png' (PHP 5.3+)
$mime = strrchr($mimePart, ':'); // ':image/png'
$mime = ltrim($mime, ':'); // 'image/png'
echo "MIME: $mime"; // image/png
?>
| 函數 | 常見錯誤 | 正確用法 |
|---|---|---|
| defined() | defined(APP_VERSION) → 常數當變數用,觸發 Notice | defined('APP_VERSION') |
| strrchr() | 以為回傳位置索引 | 回傳的是子字串,需配合 strlen/strpos 取位置 |
| strrchr() | 多字元 needle 只匹配第一字元 | strrchr 只支援單字元搜尋;多字元請用 strrpos + substr |
defined() 是條件編譯、配置檢查的基石,配合 constant() 實現動態常數存取。strrchr() 適合「從右邊切割」場景:取副檔名、解析路徑、提取協議後綴。複雜解析請改用 parse_url、pathinfo 或正則。