今天学习的这些杂项函数放在官方文档的一个杂项扩展中。事实上,这些功能并不是什么特殊的扩展,不需要安装任何东西。可以用,就是一些简单的功能。当然其中很多内容也是我们经常用到的,所以这里就带大家一起来学习一下。常量操作常量的操作相信对于每天使用PHP开发的朋友们来说绝对是再熟悉不过了。无论是使用框架还是自己编写代码,常量相关的内容都会用到。define("A","测试A");var_dump(A);//string(6)"测试A"var_dump(B);//警告:使用未定义的常量B-假定为'B'var_dump(constant('A'));//string(6)"测试A"var_dump(constant('B'));//NULL//PHP警告:使用未定义的常量B-假定为'B'var_dump(defined('A'));//bool(true)var_dump(defined('B'));//bool(false)简单的通过define()函数定义了一个常量,它有两个参数,第一个参数是常量常量的名称,第二个参数是常量的值。这里需要注意的是,常量的值只能是标量类型,即数字、字符串等内容,不能是变量或对象类型,因为这种类型的内容随时可能发生变化。使用常量名可以直接打印常量的内容。当然我们也可以使用constant()函数来获取常量的内容,可以接收字符串类型参数的常量名。defined()函数用于判断指定常量是否存在。它只比define()函数多了一个字母d。使用的时候要小心,不要在定义常量的时候多写这个d。对于接口和类,也可以在它们内部使用const关键字来定义内部常量。interfaceA1{constTEST='TestA1';}classA2{constTEST='TestA2';}var_dump(constant('A1::TEST'));//string(7)"测试A1"var_dump(constant('A2::TEST'));//string(7)"测试A2"var_dump(defined('A1::TEST'));//bool(true)var_dump(defined('A2::TEST'));//bool(true)内部常量是作用域的,它们只在类内部生效。而且默认情况下,这些常量是直接静态类型的,所以我们不需要单独添加static关键字。代码高亮与文件格式相关我们可以使用一个函数让代码实现高亮效果。其实就是在指定的代码内容上加上代码和一些格式标签。var_dump(highlight_string('',true));//string(195)"//();?>?>////
"highlight_string()的第二个参数是指定返回的类型。如果我们不给这个参数,它的默认值为false,所以调用highlight_string()时会直接输出,而不是将内容作为返回值返回。也就是说,像phpinfo()这样的函数,它会直接打印结果。另外,我们还可以直接高亮一个文件的内容。var_dump(highlight_file('1.PHP中的一些杂项函数学习.php',true));//string(10610)"//
定义("A","测试A");
var_dump(A);//string(6)测试A"
var_dump(B//
定义("A","测试A");
var_dump(A);//string(6)“测试A”
var_dump(B2636//[1]=>292338001//)在上一篇文章中,我们其实讲了这个hrtime()的功能功能。它返回自当前操作系统打开以来经过的时间。比如我的电脑是早上开机的,从开机到现在只过去了2636秒。它返回纳秒级别。如果不加boolean类型的true参数,会以数组的形式返回。0的下标是秒数,1的下标是纳秒数。而如果加上true参数,则直接以数值形式返回总秒数加纳秒数。其他与时间相关的函数是一些暂停程序执行的函数,比如我们经常使用的sleep()函数。$time=微时间(真);echo$time,PHP_EOL;//1609723496.283sleep(1);echomicrotime(true)-$time,PHP_EOL;//1.0041399002075usleep(2000);echomicrotime(true)-$time,PHP_EOL;//1.0062718391418time_nanosleep(2,100000);echomicrotime(true)-$time,PHP_EOL;//3.0067868232727time_sleep_until(time()+3);echomicrotime(true)-$time,PHP_EOL;//5.71727172()是每隔几秒暂停一次程序的执行。其他两个函数usleep()以微秒为单位暂停,time_nanosleep()以纳秒为单位暂停。最后一个time_sleep_until()需要的参数是暂停到指定时间。比如这里我们指定三秒后暂停,它需要的参数是time()+3的时间戳。当然我们日常开发中最常用的就是sleep()和usleep()。这里可以作为知识点的扩展,我们的PHP可以实现纳秒级的停顿。生成唯一ID生成唯一ID这个函数相信很多同学都经常用到,它就是uniqid()函数。但是你了解它的原理和参数吗?var_dump(uniqid());//字符串(13)"5ff270b0014b4"var_dump(uniqid('pre_'));//string(17)"pre_5ff270b0014d7"var_dump(uniqid('pre_',true));//string(27)"pre_5ff270b0014df3.11521937"uniqid()根据当前时间的微秒数生成唯一的ID,也就是说不能完全保证生成的ID是唯一的。在超并发的前提下,很有可能一微秒内会有多个请求到达,所以也有可能产生多个重复的ID。在这种情况下,我们可以使用它的参数来使生成的ID更具有唯一性。第一个参数是指定生成的ID的前缀。对于负载均衡后的不同业务或者不同的处理机,我们可以使用不同的前缀来区分。第二个参数是在返回字符串的末尾添加额外的熵,可以进一步增加唯一性的可能性。其他功能杂项功能除了上面介绍的比较常见和常用的功能外,还包含其他不太常用的内容。系统负载我们可以使用一个函数sys_getloadavg()来查看当前操作系统的负载,返回的结果数组对应Linux系统中1m、5m、15m的负载。var_dump(sys_getloadavg());//array(3){//[0]=>//float(2.98828125)//[1]=>//float(2.4775390625)//[2]=>//float(2.341796875)//}Executecodeeval()这个函数不管名字还是函数,都和JavaScript中的eval()一样,可以解析并运行字符串中的PHP代码。但是,需要注意的是,这也是一个危险的功能。要运行的字符串必须是我们可以控制的内容。永远不要运行用户可以上传的内容。eval("echo'123',PHP_EOL;");//123退出中断程序exit;die;exit(0);exit("End");//Endexit()和die()不用过多介绍,两者的功能是一样的,die()可以看作是exit()的别名。如果没有参数,可以省略后面的括号。该参数的作用是程序中断后输出。如果参数是字符串,则直接输出字符串的内容。如果参数为数字,则相当于返回程序的运行状态码,这与Linux中的状态码是同一个概念。浏览器信息当我们使用浏览器访问时,我们可以通过get_browser()函数获取浏览器的一些信息。var_dump(get_browser(null,true));//array(15){//["browser_name_regex"]=>//string(108)"~^mozilla/5\.0\(.*macosx10.15.*\)applewebkit.*\(.*khtml.*like.*gecko.*\).*version/14\.0.*safari/.*$~"//["browser_name_pattern"]=>//字符串(88)"Mozilla/5.0(*MacOSX10?15*)applewebkit*(*khtml*like*gecko*)*Version/14.0*Safari/*"//["parent"]=>//string(11)"Safari14.0"//["platform"]=>//string(5)"macOS"//["comment"]=>//string(11)"Safari14.0"//["browser"]=>//string(6)"Safari"//["browser_maker"]=>//string(9)"AppleInc"//["version"]=>//string(4)"14.0"//["majorver"]=>//string(2)"14"//["device_type"]=>//string(7)"Desktop"//["device_pointing_method"]=>//string(5)"mouse"//["minorver"]=>//string(1)"0"//["ismobiledevice"]=>//string(0)""//["istablet"]=>//string(0)""//["crawler"]=>//string(0)""//}需要注意的是这个功能需要一个browscap.ini文件的支持,这个文件可以从http://browscap.org下载到browscap.ini文件,将php.ini文件中browscap的路径指定为你下载的browscap.ini文件。这个功能很少见,大家可以了解一下。连接信息最后是查看PHP脚本的连接信息,即查看脚本与客户端的连接信息。ignore_user_abort(真);while(1){回声“”;if(connection_status()!=0){ob_start();var_dump(connection_aborted());$v=ob_get_contents();ob_end_flush();file_put_contents("1.txt",date("Y-m-dH:i:s")."连接中止!".$v.PHP_EOL,FILE_APPEND);出口;}}//1.txt//2021-01-0408:56:22连接中止!int(1)ignore_user_abort()函数用于设置客户端断开连接时是否中断脚本的执行。当我们访问这个测试页面并立即在浏览器上关闭它时,就会触发这个功能。下面的死循环代码用来监听当前连接的状态,使用函数connection_status(),当它的值为0时,即CONNECTION_NORMAL的状态属于正常连接的状态,当不是0,我们将其记录在日志文件中。connection_aborted()是判断连接是否中断的函数。这是一个直接输出流的函数。我们需要通过输入输出流来捕获它的内容。最后,当浏览器关闭时,连接相关的内容记录在文件1.txt中。我们可以查看这个文件中的信息。综上所述,今天的内容虽然是PHP文档中的杂项扩展,而且内容确实很杂,但是其中很多确实是我们经常使用的。掌握好它们,开阔你的眼界,总有一天这些内容会给你带来祝福,加油,成为一名工人。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/01/source/1。学习PHP的一些杂项函数。php参考文档:https://www.php.net/manual/zh/book.misc.php===============各媒体平台可关注【硬核项目经理】