日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php asserttrue,PHP8.0的新特性:错误处理方面已经改进

發布時間:2025/3/12 php 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php asserttrue,PHP8.0的新特性:错误处理方面已经改进 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 系統函數引發TypeError和ValueError異常

一.TypeError和ValueError改進作用

#在PHP 8中,內部函數參數強制執行類型和值驗證,如果不允許使用預期的類型或值,則將拋出TypeError或ValueError異常錯誤.

#在PHP 8之前,這會導致PHP警告.

1.TypeError觸發條件

提供的值是不是正確的類型.

2.ValueError觸發條件

如果提供的值是正確的類型,但PHP在上下文中不可接受,則PHP會引發ValueError異常.

二.系統函數引發TypeError

substr('foo', []);try{ substr('linux',[]);}catch(TypeError $e){ echo $e->getMessage();}

三.系統函數引發ValueError

json_decode('"foo"', true, -1);try{ json_decode('"foo"', true, -1);}catch(ValueError $e){ echo $e->getMessage();}

四.自定義函數引發TypeError

function show(string $name){ var_dump($name);}show([]);

五.自定義函數引發ValueError

function show(int $number){ if($number<10){ throw new ValueError('this value must be greater or equal 10'); }else{ echo $number; }}show(5);#try捕捉function show(int $number){ if($number<10){ throw new ValueError('the number must be greater and equal 10'); }else{ echo $number; }}try{ show(5);}catch(ValueError $e){ echo $e->getMessage();}2 Throw表達式拋出異常

一.改進原因

在PHP8前,不允許在單個表達式時引發異常,現在可以在箭頭函數、三元表達式等單個表達式的任何地方引發異常.

二.箭頭函數使用

//第1階段

function show(){ return 123;}echo show();// 第2階段$fn=function(){ return 123;};echo $fn();//第3階段echo (function(){ return 123;})();// 第4階段$fn=fn()=>123;echo $fn();// 第5階段echo (fn()=>123)();

三.箭頭函數+引發異常

1.先定義后執行

$fn=fn()=>throw new Exception('error');try{ $fn();}catch(Exception $e){ echo $e->getMessage();}

2.定義并同時執行

(fn() => throw new Exception('oops'))();

四.三元表達式使用

$name=false;$age=20;$r=$name ? $name : $age;$r=$name ?: $age;$r=$name ?? $age;var_dump($r);

五.三元表達式+引發異常

#前面為真則返回第二個值,否則返回第三個值

$value = $name ? $name : throw new Exception('value not set');$value = $name ?: throw new Exception('value not set');

#前面存在則返回第一個值,否則返回第二個值

$value = $name ?? throw new Exception('value not set');

3 無變量捕獲的Catch

一.作用

在catch讀法中不用必須寫$e變量

二.語法

try{ ...}catch(Exception){ ...}

三.實例

try{ (fn()=>throw new Exception('error'))();}catch(Exception){ echo 'Exception error!';}

4 默認錯誤報告設置為E_ALL

一.配置方法

#php.ini

error_reporting = E_ALL

二.恢復舊設置

#屏蔽已棄用錯誤、提示錯誤、語法嚴格性檢測

E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE

三.屏蔽所有錯誤

display_errors = Off

四.配置生效

pkill -USR2 php-fpm

5 默認情況下顯示PHP啟動錯誤

#php.ini

一.默認PHP啟動錯誤

display_startup_errors = On

二.測試PHP啟動錯誤

1.制造啟動錯誤

session.name=''

2.啟動測試

pkill php-fpm/usr/local/php/sbin/php-fpm

三.屏蔽PHP啟動錯誤

1.startup錯誤

display_startup_errors = Off

2.控制錯誤級別

error_reporting = E_ALL & ~E_WARNING

3.測試結果

pkill php-fpm/usr/local/php/sbin/php-fpm

4.商用建議關閉

6 Assert斷言默認情況下引發異常

一.Assert改進

#php.ini默認開啟

#assert(true === false);

1.低版本下失敗的assert斷言會引發警告,但不會引發異常.(PHP5)

assert.exception=On

2.php8開始失敗的assert斷言會直接引發異常.(PHP7,PHP8)

assert.exception=On

二.Assert回調

1.display_errors = Off

2.assert.callback = assert_fail

3.回調實驗

assert(5<10);function assert_fail($file,$line,$assertion,$description){ echo $file; echo '

'; echo $line; echo '

'; echo $description;}

7 操作符@不再抑制Fatal錯誤

一.新版本中@不再抑制Fatal錯誤

1.實例1

@substr();

2.實例2

function load_files() { require_once 'file-that-does-not-exist.oops';}@load_files();

3.在PHP 8.0中,該@運算符不會抑制在PHP 8.0之前已靜音的某些類型的錯誤

E_ERROR -致命的運行時錯誤.E_CORE_ERROR -PHP的初始啟動中發生致命錯誤.E_COMPILE_ERROR -致命的編譯時錯誤.E_USER_ERROR-用戶觸發的trigger_error()功能錯誤.E_RECOVERABLE_ERROR -可捕獲的致命錯誤.E_PARSE -編譯時解析錯誤.

4.E_USER_ERROR實例

function do_something() { trigger_error('Something went wrong', E_USER_ERROR);}@do_something();

8 PDO默認錯誤模式為ERRMODE_EXCEPTION

一.創建sqlite3數據庫php8.db

sqlite3 /sqlite3/php8.db

二.sql基礎操作

1.創建表user

create table user(id integer PRIMARY KEY AUTOINCREMENT,name text,age integer);

2.插入數據

insert into user values(1,'user1',20);insert into user values(2,'user2',22);

3.查詢數據

select * from user;

三.linux下查看數據庫文件(十六進制)

xxd php8.db

四.php pdo操作sqlite3 php8數據庫

$pdo = new PDO('sqlite:/sqlite3/php8.db');

五.pdo報錯類型PDO::ATTR_ERRMODE

1.PDO::ERRMODE_SILENT 02.PDO::ERRMODE_WARNING 13.PDO::ERRMODE_EXCEPTION 2

六.pdo設置錯誤類型

1.設置

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

2.獲取

$pdo->getAttribute(PDO::ATTR_ERRMODE);

七.pdo操作user表

$sql='select * from user2';$smt=$pdo->prepare($sql);$smt->execute();$arr=$smt->fetchAll(PDO::FETCH_ASSOC);

八.pdo操作異常捕捉

try{ $pdo=new PDO('sqlite:/sqlite3/php8.db'); $smt=$pdo->prepare('select * from user2'); $smt->execute(); $rows=$smt->fetchAll(PDO::FETCH_ASSOC);}catch(PDOException $e){ echo $e->getMessage();}

總結

以上是生活随笔為你收集整理的php asserttrue,PHP8.0的新特性:错误处理方面已经改进的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。