PHP笔记4--常用函数、错误处理

常用函数

输出函数

print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号(因为是结构不是函数)
print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)

echo print('hello <br/>'); //1
print 'hello <br/>'; //hello
$a = 'hello world'; //hello world
print_r($a)

时间函数

date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数)转换成对应的格式,
如果没有指定特定的时间戳,那么就是默认解释当前时间戳
time():获取当前时间对应的时间戳
microtime():获取微秒级别的时间
strtotime():按照规定格式的字符串转换成时间戳 (中文不行)

print date('Y年m月d日 <br/>'); //2020年09月10日
echo '<br/>1';
print time(); //1599747674
echo '<br/>2';
print microtime();//0.06321500  1599747765
echo '<br/>3';
print strtotime('tomorrow 10 hour');//15997475660.47206800

数学函数

max():指定参数中最大的值
min():比较两个数中较小的值
rand():得到一个随机数,指定区间的随机整数
mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)
round():四舍五入
ceil():向上取整
floor():向下取整
pow():求指定数字的指定指数次结果:pow(2,8) == 2^8 == 256
abs():绝对值
sqrt():求平方根

函数相关的函数

function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
func_get_arg():在自定义函数中去获取指定数值对应的参数 – 实参位置
func_get_args():在自定义函数中获取所有的参数(数组)-- 所有实参
func_num_args():获取当前自定义函数的参数数量 – 实参数量

function test ($a,$b){
    
    
	
	var_dump(func_get_arg(1));//string(1) 
	var_dump(func_get_args());// array(4) { [0]=> int(1) [1]=> string(1) "2" [2]=> int(3) [3]=> int(4) }
	var_dump(func_num_args());// int(4)
	}

function_exists('test')&&test(1,'2',3,4);

错误处理

指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员

错误分类

1)语法错误(编译错误):用户书写的代码不符合PHP的语法规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行(Parse error)
2)运行时错误:代码编译通过,但是代码在执行的过程中会出现一些条件不满足导致的错误(runtime error)
3)逻辑错误:程序员在写代码的时候不够规范,出现了一些逻辑性的错误,导致代码正常执行,但是得不到想要的结果

错误代号

所有看到的错误代号在PHP中都被定义成了系统常量(可以直接使用)
1)系统错误:
E_PARSE:Parse error,编译错误,代码不会执行
E_ERROR:Fatal error,致命错误,会导致代码不能正确继续执行(出错的位置断掉)
E_WARNING:Warning,警告错误,不会影响代码执行,但是可能得到意想不到的结果
E_NOTICE:Notice,通知错误,不会影响代码执行
2)用户错误:
E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE
用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到)
3)其他:
E_ALL,代表着所有的错误(通常在进行错误控制的时候使用比较多),建议在开发过程中(开发环境)使用
所有以E开头的错误常量(代号)其实都是由一个字节存储,每一种错误占据一个对应的位(比如0000 0001 表示E_ERROR,0000 0010表示E_WARNING),如果想进行一些错误的控制,可以使用位运算进行操作
排除通知级别notice:E_ALL & ~E_NOTICE
(解释:比如E_ALL为11111111,E_NOTICE为00000100,则~E_NOTICE为11111011,&运算后为11111011,则为排除了E_NOTICE)
只要警告和通知:E_WARNING | E_NOTICE
(解释:比如E_WARNING为00000010,E_NOTICE为00000100,|运算后为00000110,则表示只包含了E_WARNING和E_NOTICE)

错误触发

程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,输出给用户(主要针对代码的语法错误和运行时错误)
人为触发:知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示
认为触发方式,Trigger_error(错误提示,产生一个用户级别的 error/warning/notice 信息)

$b =0 ;
if($b ==0){
    
    
	Trigger_error('变量不能为0'); //显示:Notice: 变量不能为0 in C:\E\server\www\test3.php on line 88
	Trigger_error('变量不能为0',E_USER_ERROR);//Fatal error: 变量不能为0 in C:\E\server\www\test3.php on line 89
	}

错误显示设置

错误显示设置:哪些错误该显示,以及该如何显示.在PHP中,其实有两种方式来设置当前脚本的错误处理
1、PHP的配置文件:全局配置:php.ini文件
display_errors:是否显示错误
error_reporting:显示什么级别的错误

display_errors = On
error_reporting = E_ALL

2、可以在运行的PHP脚本中去设置:在脚本中定义的配置项级别比配置文件高(通常在开发当中都会在代码中去进行控制和配置)
error_reporting():设置对应的错误显示级别,没有参数表示获取当前系统错误处理对应的级别
设置举例:error_reporting(E_ERROR | E_WARNING | E_PARSE)
ini_set(‘配置文件中的配置项’,配置值)
ini_set(‘error_reporting’,E_ALL);
ini_set(‘display_errors’,1);

错误日志设置

在实际生产环境中,不会直接让错误赤裸裸的展示给用户:
1、 不友好
2、 不安全:错误会暴露网站很多信息(路径、文件名)
所以在生产环境中,一般不显示错误(错误也比较少),但是不可能避免会出现错误(测试的时候不会发现所有的问题),这个时候不希望看到,但是又希望捕捉到可以让后台程序员去修改:需要保存到日志文件中,
需要在PHP配置文件中或者代码中(ini_set)设置对应error_log配置项
1、 开启日志功能

log_errors = On

2、指定路径 (指定文件不会自动生成,必须手动创建)

error_log = 'C:/E/server/logs/php_errors.log'

自定义错误处理

最简单的错误处理:trigger_errors()函数,但是该函数不会阻止系统报错
PHP系统提供了一种用户处理错误的机制:用户自定义错误处理函数,然后将该函数增加操系统错误处理的句柄中,然后系统会在碰到错误之后,使用用户定义的错误函数。

1、如何将用户自定义的函数放到系统中?set_error_handler()
2、自定义错误处理函数,系统有要求 参见文档

//自定义错误处理机制
header('Content-type:text/html;charset=utf-8');
//方法 前两个参数 必须,后两个参数可选
function my_error($errno,$errstr,$errfile,$errline){
    
    
	//error_reporting() & $errno:如果当前的错误级别($errno)在系统系统处理的错误级别(error_reporting())中存在则处理,如果不存在则直接return出去不进行处理。
	//if(error_reporting()&$errno){
    
    
	//	return false;
	//	}
	//echo 'string';
	switch($errno){
    
    
		case E_USER_ERROR:
				echo '1fatal error in file '.$errfile.' line '.$errline.'<br/>';
				echo 'error info: '.$errstr;
				break;
		case E_USER_WARNING:
				echo '2fatal error in file '.$errfile.' line '.$errline.'<br/>';
				echo 'error info: '.$errstr;
				break;		
		case E_USER_NOTICE:
				echo '3fatal error in file '.$errfile.' line '.$errline.'<br/>';
				echo 'error info: '.$errstr;
				break;				
		case E_ALL:
				echo '4fatal error in file '.$errfile.' line '.$errline.'<br/>';
				echo 'error info: '.$errstr;
				break;		
		default:
				echo '5fatal error in file '.$errfile.' line '.$errline.'<br/>';
				echo 'error info: '.$errstr;
				break;	
		}
	}

//	注册自定义函数:修改错误处理机制
echo  $a;//会报错 Notice: Undefined variable: a in C:\E\server\www\test3.php on line 157
set_error_handler('my_error');//修改错误机制,使用自定义my_error函数处理
echo $a;// 未报错 显示 5fatal error in file C:\E\server\www\test3.php line 163

当前属于简单自定义模式,如果要复杂,可以在某些影响代码功能的错误发生后,让用户跳转到某个指定界面。

猜你喜欢

转载自blog.csdn.net/zhangxm_qz/article/details/108525316
今日推荐