PHP7的期望是如何使用的?

2019-05-13 14:57 更新

PHP7 中期望是對以往的 assert()函數(shù)的向后兼容增強。assert()現(xiàn)在是一個語言結構,它允許對期望的定義: 在開發(fā)和測試環(huán)境中生效的斷言,但在生產(chǎn)代碼中允許優(yōu)化,以實現(xiàn)零成本斷言,因此,期望在生產(chǎn)代碼中拋出作為異常提供的對象允許零成本斷言,并提供在斷言失敗時拋出自定義異常的能力。assert()中的第一個參數(shù)是一個表達式,而不是要測試的字符串或布爾值。

assert()參數(shù)

  • assertion - 斷言。在 PHP5 中,這必須是要計算的字符串或者要測試的布爾值。在 PHP7中,這也可以是返回一個值的任何表達式,它將被執(zhí)行,結果用于指示斷言是成功還是失敗。
  • description -(可選的說明)如果斷言失敗,將包含失敗消息。
  • exception - 在 PHP7 中,第二個參數(shù)可以是一個 Throwable 對象,而不是一個描述性的字符串,在這種情況下,如果斷言失敗,并且啟用了assert.exception 配置指令,則這個對象將被拋出。

assert()配置指令

指示 默認值 可能的值
zend.assertions 1

1 - 生成并執(zhí)行代碼(開發(fā)模式)

0 - 生成代碼,但在運行時跳過它

-1 - 不生成代碼(生產(chǎn)模式)

assert.exception 0

1 - 當斷言失敗時,拋出提供的異常作為異常,或者在未提供異常的情況下拋出新的 AssertionError 對象。

0 - 如上所述使用或生成 Throwable,但只生成基于該對象的警告,而不是拋出它(與 PHP5 行為兼容)

assert()返回值:

如果斷言是假的,則返回 FALSE,否則返回 TRUE。ini_set('assert.exception', 1);

使用示例一:

<?php
   ini_set('assert.exception', 1);
   class CustomError extends AssertionError {}
   assert(false, new CustomError('Custom Error Message!'));
?>

它產(chǎn)生以下瀏覽器輸出:

Fatal error: Uncaught CustomError: Custom Error Message! in...

使用示例二:

<?php
ini_set('assert.exception',1);
class CustomError extends AssertionError {}
assert(true == false, new CustomError('True is not false!'));
echo 'Hi!';
?>

將 zend.assertions 設置為 0,上面的例子將輸出:

Hi!

將 zend.assertions 設置為 1,將 assert.exception 設置為 0 時,上述示例將輸出:

Warning: assert(): CustomError: True is not false! in -:4
Stack trace:
#0 {main} failed in - on line 4
Hi!

更新日志

PHP版本描述
7.2.0assertion 被廢棄時使用字符串。當 assert.active 和 zend.assertions 都設置為 時,它會發(fā)出E_DEPRECATED通知。
7.0.0assert()現(xiàn)在是一個語言構造而不是一個函數(shù)。assertion現(xiàn)在可以是一個表達式。第二個參數(shù)現(xiàn)在被解釋為 exception(如果給出 Throwable 對象),或者description從 PHP 5.4.8 起支持。
5.4.8添加了description參數(shù)。description現(xiàn)在也提供給ASSERT_CALLBACK模式下的回調(diào)函數(shù)作為第四個參數(shù)。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號