2024 年日本 PHP 研討會

assert_options

(PHP 4, PHP 5, PHP 7, PHP 8)

assert_options設定/取得各種 assert 旗標

警告

此函式自 PHP 8.3.0 起已被 *棄用*。強烈建議不要依賴此函式。

說明

assert_options(int $option, mixed $value = ?): mixed

設定各種 assert() 控制選項,或僅查詢它們的目前設定。

注意建議不要使用 assert_options(),而應使用 ini_set()ini_get() 分別設定和取得 php.ini 指令 zend.assertionsassert.exception

參數

option

斷言選項
選項 INI 設定 預設值 說明
ASSERT_ACTIVE assert.active 1 啟用 assert() 評估
ASSERT_EXCEPTION assert.exception 1 為每個失敗的斷言拋出 AssertionError
ASSERT_WARNING assert.warning 1 為每個失敗的斷言發出 PHP 警告
ASSERT_BAIL assert.bail 0 在斷言失敗時終止執行
ASSERT_QUIET_EVAL assert.quiet_eval 0 在斷言表達式評估期間停用 error_reporting。自 PHP 8.0.0 起移除。
ASSERT_CALLBACK assert.callback (null) 斷言失敗時要呼叫的回呼函式

value

選項的新的可選值。

透過 ASSERT_CALLBACKassert.callback 設定的回呼函式應具有以下簽章

assert_callback(
    字串 $file,
    整數 $line,
    ?字串 $assertion,
    字串 $description = ?
): void
file
呼叫 assert() 的檔案。
line
呼叫 assert() 的行數。
assertion
在 PHP 8.0.0 之前,傳遞給 assert() 的斷言,但僅當斷言以字串形式給出時。(如果斷言是布林條件,則此參數將是一個空字串。)從 PHP 8.0.0 開始,此參數始終為 null
description
傳遞給 assert() 的描述。

將空字串作為 value 傳遞會重置斷言回呼。

返回值

返回任何選項的原始設定。

錯誤/異常

如果 option 不是有效的選項,則會拋出 ValueError

更新日誌

版本 說明
8.3.0 assert_option() 現在已被棄用。
8.0.0 如果 option 不是有效的選項,現在會拋出 ValueError。先前會返回 false

範例

範例 #1 assert_options() 範例

<?php
// 這是我們用來處理
// 斷言失敗的函式
function assert_failure($file, $line, $assertion, $message)
{
echo
"檔案 $file$line 行的斷言 $assertion 失敗: $message";
}

// 這是我們的測試函式
function test_assert($parameter)
{
assert(is_bool($parameter));
}

// 設定我們的斷言選項
assert_options(ASSERT_ACTIVE, true);
assert_options(ASSERT_BAIL, true);
assert_options(ASSERT_WARNING, false);
assert_options(ASSERT_CALLBACK, 'assert_failure');

// 進行一個會失敗的斷言
test_assert(1);

// 由於 ASSERT_BAIL
// 設定為 true,因此永遠不會執行到這裡
echo '永遠不會執行到這裡';
?>

參見

新增註解

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

4
Frédéric Bouchery
21 年前
以下是如何使用斷言回呼函式的範例

<?php
assert_options
( ASSERT_CALLBACK, 'assert_callback');

function
assert_callback( $script, $line, $message ) {
echo
'您的腳本 <b>', $script,'</b> 中有設計錯誤:行數 <b>', $line,'</b>:<br />';
echo
'<b>', ereg_replace( '^.*//\*', '', $message ), '</b><br /><br />';
echo
'請打開原始碼檔案並檢查,因為這不是正常的行為!';
exit;
}

$x = 3;
assert('is_integer( $x ) && ($x >= 0) && ($x <= 10); //* $x 必須是 0 到 10 之間的整數值');
echo
"0 <= $x <= 10";
?>

斷言對於「契約式設計」方法論很有用…
To Top