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();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯第七届决赛之---阶乘位数

阶乘位数9的阶乘等于&#xff1a;362880它的二进制表示为&#xff1a;1011000100110000000这个数字共有19位。请你计算&#xff0c;9999 的阶乘的二进制表示一共有多少位&#xff1f; 思路总结&#xff1a; 根据平时做题规律得到如下规律&#xff1a;public class SwingDesign …

php 用户授权访问控制,用户权限访问控制功能

摘要&#xff1a;<?php namespace app\admins\controller;use think\Controller;use Util\SysDb;class Home extends Base{public function index(){&nbs<?php namespace app\admins\controller;use think\Controller;use Util\SysDb;class Home extends Base{publ…

蓝桥杯之--神秘三位数

有这样一个3位数&#xff0c;组成它的3个数字阶乘之和正好等于它本身。 即&#xff1a;abc a! b! c! 请找出所有满足要求的三位数.审好题很重要&#xff1a;三位数而非&#xff0c;三位数的个数 先写出一个函数求出某个数的阶乘&#xff0c;在跟别求出一个三位数的个十百位&…

生日快乐模板php,可会有人跟我说句生日快乐

一个人一年可以经历三百六十五次零点的跨越&#xff0c;可是真正有意义的却只有那么一次。从呱呱坠地到现在芳华正茂&#xff0c;今晚将是我要度过的第二十二个零点。从此以后&#xff0c;我便会进入到一个崭新的年龄&#xff0c;弱弱的问一句&#xff1a;可会有人跟我说句生日…

Java排序算法之--快速算法--快速上手

何为快速算法&#xff1a;它是冒泡排序的改进~ 基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#xff0c;整个排序过程可以…

php fetch返回false,Php fetch返回字符串而不是布爾值“true / false”值

Im using full calender and I have a few events that are all day events. Generally, my php set all allDay > false. Now that I noticed it adds a time on it if I do not specify a time.我正在使用完整的日歷,我有一些事件是全天活動。一般來說,我的php設置所有all…

排序算法值--堆排序

堆实际上是一棵完全二叉树&#xff0c;其任何一非叶节点满足性质&#xff1a;Key[i]<key[2i1]&&Key[i]<key[2i2]或者Key[i]>Key[2i1]&&key>key[2i2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆&#x…

linux 彻底删除oracle,Linux下完美卸载Oracle

先说一下Linux 下Oracle没有卸载干净再安装会出现什么后果吧&#xff0c;在一次生产环境安装中&#xff0c;装Oracle时出现一个错误&#xff0c;倒致oracle没有安先说一下Linux 下Oracle没有卸载干净再安装会出现什么后果吧&#xff0c;在一次生产环境安装中&#xff0c;装Orac…

oracle用户密码复杂度查询,11gR2 Database用户密码复杂度验证

已选择6行。关于密码版本的问题&#xff1a;SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;USERNAME PASSWORD_VERSIONS------------------------------ -----------------JONES 10G 11GADAMS 10G 11GCLARK 10G 11GPRESTON 11GBLAKE 10GThe passwords for accounts jones,…

排序之--冒泡排序

冒泡排序&#xff1a;从大排到小&#xff1b;所谓冒泡&#xff0c;是指通过两两比较&#xff0c;将最大的数或者最小的数先冒出来。 例如数组&#xff1a;arr[] {53,48,80,98};arr[0]跟arr[1]比较&#xff0c;将大的放在arr[0]上&#xff0c;小的放在arr[1]上&#xff0c;通过…

oracle查询结果存入临时表,Oracle查询问题引发临时表使用

分析某段时间内&#xff0c;刷卡金额大于1000的卡的消费记录&#xff0c;写法如下。sql语句写法&#xff1a;select a.dno,a.dcard,a.dcard_money,a.dcard_type,a.ddate, a.dsubshop,a.dworker,a.dtype,j.Djf Dnowjf,b.dsje,B.Dcountfrom st_card_salemx a,( select m.dcard,Co…

排序之--选择排序

所谓选择排序&#xff0c;就是将数组中的最大值&#xff0c;或者最小值选出来。public class xuanze{public void maoPao(int []arr) {for(int i 0; i < arr.length-1;i) {int min i; //容易出错for(int j i1;j < arr.length;j) {// 这里也要区分冒…

oracle状态blocked,oracle 监听状态为BLOCKED

静态监听的状态是UNKNOWN。当数据库状态是OPEN时&#xff0c;动态监听是READY&#xff1b;当数据库状态是NOMOUNT时&#xff0c;动态监听状态是BLOCKED。LSNRCTL> statusConnecting to (DESCRIPTION(ADDRESS(PROTOCOLTCP)(HOST192.168.10.65)(PORT1521)))STATUS of the LIST…

插入排序--~

插入排序&#xff0c;顾名思义&#xff0c;就是先把前面的数排好&#xff0c;后面的数来一个就插入一个&#xff0c;来一双就插入两个~&#xff08;按顺序拍~&#xff09;public class daJiMu {public void maoPao(int []arr) {for(int i 1;i < arr.length;i) {for(int j …

oracle 12c alert,Oracle 12c DG备库Alert报错ORA-01110

环境是12.2.0.1 version, Oracle Data Guard备库今天故障恢复了一下&#xff0c;RMAN恢复后发现备库Alert一直报错&#xff0c;但是备库主库同步一致&#xff0c;数据一致。2018-07-05T23:42:22.18404808:00Errors in file /u01/app/oracle/diag/rdbms/dwjrstdydb/dwjrstdydb/t…

蓝桥杯大赛基础之--数列排序

题目&#xff1a;数列排序 问题描述  给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200输入格式  第一行为一个整数n。  第二行包含n个整数&#xff0c;为待排序的数&#xff0c;每个整数的绝对值小于10000。输出格式  输出一行&#…

linux窗帘文件夹命令,窗帘面板和电机 · 控客智能家居 Linux SDK 使用手册 · 看云...

## 开关停| OPEN | CLOSE | STOP || --- | --- | --- || 开 | 关 | 停 |### 请求json{"nodeId": "100","opcode": "SWITCH","arg": "OPEN","requester": "HJ_Server"}### 响应json{"nod…

关于maven面试的哪些事儿~

maven是什么&#xff1f; 优点&#xff1a; 1. Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。 2. 在多个开发团队环境时&#xff0c;Maven可以设置按标准在非常短的时间里完成配置工作&#xff0c;使开发人员的工作更加轻松。 3. Maven增加…

0640权限linux啥意思,linux系统rwx(421)、777权限详解

摘要linux的常见权限&#xff0c;mark一下常用的linux文件权限如下&#xff1a;r--r--r--rw-------rw-r--r--rw-rw-rw-rwx------rwxr--r--rwxr-xr-xrwxrwxrwx12345678从左至右&#xff0c;先是3个数字&#xff0c;代表文件的权限然后是9个字母(或者连字符)其中 1-3位数字代表文…

spring常见术语理解

SpringMVC工作流程&#xff1a;流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器&#xff0c;生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 …