PHP 允許在 全局作用域 使用 return,這在 C/Java 等語言中是不可能的。其行為取決於上下文:
<?php
echo "開始\n";
if ($maintenance) {
echo "維護中\n";
return; // 直接中止腳本,後續代碼不執行
}
echo "正常運行\n"; // 不會輸出
效果等同 exit,但 return 可選擇性返回整數作為 CLI 退出碼。
config.php:
<?php
return [
'db' => ['host' => 'localhost', 'name' => 'app'],
'debug' => true,
];
index.php:
$config = include 'config.php'; // $config 獲得返回的數組 var_dump($config['db']['host']); // 'localhost'
優勢:配置文件純數據、無副作用、安全(直接訪問不會輸出)、語義清晰。
// vendor/autoload.php 簡化 $loader = require __DIR__ . '/composer/autoload_real.php'; // 實際返回 ComposerAutoloaderInit::getLoader() 實例
<?php
// public/index.php
require '../vendor/autoload.php';
$app = new App();
if ($app->isMaintenance()) {
http_response_code(503);
include '../templates/503.php';
return; // 阻斷後續路由分發、控制器執行
}
$app->run();
<?php // deploy.php if (!checkEnv()) return 1; if (!gitPull()) return 2; if (!composerInstall()) return 3; if (!runMigration()) return 4; return 0; // 成功
Shell 捕獲:
php deploy.php
case $? in
0) echo "成功" ;;
1) echo "環境檢查失敗" ;;
2) echo "代碼拉取失敗" ;;
*) echo "未知錯誤" ;;
esac
| 維度 | return | exit / die |
|---|---|---|
| 作用範圍 | 當前文件(包含文件則返回調用處) | 整個 PHP 進程 |
| 包含文件中 | 返回值給 include 表達式 | 直接終止所有執行 |
| 可返回值類型 | 任意類型(數組、對象、資源) | 字符串/整數(輸出/退出碼) |
| finally / register_shutdown_function | 正常執行 | 正常執行 |
| 適用場景 | 配置返回、流程控制、CLI 退出碼 | 嚴重錯誤、強制終止 |
return [...]:安全、可緩存、語義明確return 做守衛子句:減少嵌套,提高可讀性return $code:便於單元測試(可 include 驗證返回值)return:應封裝在函數/方法中