PHP中的一些杂项函数学习 phpeach函数
yuyutoo 2024-11-10 13:47 3 浏览 0 评论
今天来学习的这些杂项函数在官方文档中都是放在一个杂项扩展中的,其实这些函数都并不是什么什么特别的扩展,也不需要安装什么东西就可以使用,它们就是一些简单的功能函数而已。当然,其中不少内容也是我们经常会使用的,这里就带大家一起再学习学习。
常量操作
常量的操作相信对于我们日常使用 PHP 开发的小伙伴来说绝对不会陌生。不管是使用框架还是自己写代码,经常会使用到常量相关的内容。
define("A", "Test A");
var_dump(A); // string(6) "Test A"
var_dump(B); // Warning: Use of undefined constant B - assumed 'B'
var_dump(constant('A')); // string(6) "Test A"
var_dump(constant('B')); // NULL
// PHP Warning: Use of undefined constant B - assumed 'B'
var_dump(defined('A')); // bool(true)
var_dump(defined('B')); // bool(false)
简单地定义常量就是使用 define() 这个函数,它有两个参数,第一个参数是常量的名称,第二个参数就是常量的值。这里需要注意的是,常量的值只能是标量类型,也就是数字、字符串这类的内容,不能是变量或者对象类型,因为这类型的内容都有随时改变的可能。
直接使用常量名就可以打印出常量的内容,当然,我们也可以使用 constant() 这个函数来获取常量的内容,它可以接收字符串类型的参数的常量名。
defined() 这个函数是用于判断指定的常量是否存在,它只比 define() 函数多了一个字母 d ,在使用的时候要小心,不要在定义常量的时候多写了这个 d 哦。
对于接口和类来说,也可以在它们的内部使用 const 关键字来定义内部常量。
interface A1{
const TEST = 'Test A1';
}
class A2{
const TEST = 'Test A2';
}
var_dump(constant('A1::TEST')); // string(7) "Test A1"
var_dump(constant('A2::TEST')); // string(7) "Test A2"
var_dump(defined('A1::TEST')); // bool(true)
var_dump(defined('A2::TEST')); // bool(true)
内部常量是有作用域范围的,它们只在类的内部生效。而且在默认情况下,这些常量直接就是静态类型的,不需要我们再单独添加 static 关键字。
代码高亮及文件格式相关
我们可以使用一个函数,来让代码实现高亮的效果。其实也就是给指定的代码内容增加了 code 以及一些格式标签。
var_dump(highlight_string('<?php phpinfo(); ?>', true));
// string(195) "<code><span style="color: #000000">
// <span style="color: #0000BB"><?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?></span>
// </span>
// </code>"
highlight_string() 的第二个参数是指定返回的类型,如果我们不给这个参数的话,它的默认值是 false ,这样调用 highlight_string() 时就会直接输出而不是将内容作为返回值返回。也就是说,像 phpinfo() 这类函数一样,它会直接将结果打印出来。
另外,我们也可以直接对一个文件里面的内容进行高亮操作。
var_dump(highlight_file('1.PHP中的一些杂项函数学习.php', true));
// string(10610) "<code><span style="color: #000000">
// <span style="color: #0000BB"><?php<br /><br /><br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">"A"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Test A"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">A</span><span style="color: #007700">); </span><span style="color: #FF8000">// string(6) "Test A"<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">B</span><span style=" ……………………………………
var_dump(show_source('1.PHP中的一些杂项函数学习.php', true));
// string(10610) "<code><span style="color: #000000">
// <span style="color: #0000BB"><?php<br /><br /><br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">"A"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Test A"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">A</span><span style="color: #007700">); </span><span style="color: #FF8000">// string(6) "Test A"<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">B</span><span style=" ……………………………………
highlight_file() 函数的第一个参数需要的是一个文件的路径,而第二个参数的作用就和 highlight_string() 中的第二个参数的作用是一样的。另外,highlight_file() 还有一个别名函数叫做 show_source() 。
除了代码高亮的功能之外,还有一个函数 php_strip_whitespace() 可以帮助我们直接去掉代码中的空格和换行以及注释内容。就像压缩代码之类的工具一样。
var_dump(php_strip_whitespace("1.PHP中的一些杂项函数学习.php"));
// string(570) "<?php
// define("A", "Test A"); var_dump(A); var_dump(B); var_dump(constant('A')); var_dump(constant('B')); var_dump(defined('A')); var_dump(defined('B')); interface A1{ const TEST = 'Test A1'; } class A2{ const TEST = 'Test A2'; } var_dump(constant('A1::TEST')); var_dump(constant('A2::TEST')); var_dump(defined('A1::TEST')); …………………………
时间操作函数
在杂项函数中,也有一些时间相关的操作函数,比如系统运行的时间。
echo hrtime(true), PHP_EOL; // 2636292334692
print_r(hrtime());
// Array
// (
// [0] => 2636
// [1] => 292338001
// )
在之前的文章中我们其实有讲过这个 hrtime() 函数的作用。它返回的是当前操作系统开机到现在经过的时间,比如我的电脑是早上开机的,从开机到现在只经过了 2636 秒。它返回的是纳秒级别的,如果不加那个布尔类型为 true 的参数的话,它就会以数组的形式返回,0 下标的是秒数,1 下标的是纳秒数。而如果加了 true 参数的话,它就会直接以数字格式返回整体的秒加上纳秒数。
另外一些时间相关的函数就是暂停程序执行的一些函数,比如我们经常会用到的 sleep() 函数。
$time = microtime(true);
echo $time, PHP_EOL; // 1609723496.283
sleep(1);
echo microtime(true) - $time, PHP_EOL; // 1.0041399002075
usleep(2000);
echo microtime(true) - $time, PHP_EOL; // 1.0062718391418
time_nanosleep(2, 100000);
echo microtime(true) - $time, PHP_EOL; // 3.0067868232727
time_sleep_until(time()+3);
echo microtime(true) - $time, PHP_EOL; // 5.7171077728271
sleep() 是以秒为间隔暂停程序的执行。而其它的两个函数 usleep() 则是以微秒, time_nanosleep() 是以纳秒来进行暂停的。最后一个 time_sleep_until() 所需要的参数则是暂停到指定的时间,比如这里我们指定在三秒后暂停,它需要的参数就是 time() + 3 这个时间戳。当然,我们在日常开发中最常用的还是 sleep() 和 usleep() 。这里大家可以当做扩充一下知识点,我们 PHP 是可以实现纳秒级的暂停的。
生成唯一ID
生成唯一ID这个函数相信不少同学也经常使用,就是那个 uniqid() 函数。不过它的原理和参数你了解嘛?
var_dump(uniqid()); // string(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)
// }
执行代码
eval() 这个函数和 JavaScript 中的 eval() 不管名称还是作用都是一样的,可以解析并运行一个字符串中的 PHP 代码。不过需要注意的是,它也是属于危险函数哦。要运行的字符串一定是我们自己可控的内容,千万不要运行用户能够上传的内容哦。
eval("echo '123', PHP_EOL;"); // 123
退出中断程序
exit;
die;
exit(0);
exit("End"); // End
exit() 和 die() 不用过多介绍了,它们两个的作用是一样的,可以将 die() 看成是 exit() 的别名。如果在没有参数的情况下,可以省略不写后面的括号。而参数的作用是在中断程序运行后进行输出。如果参数是字符串,则直接输出字符串的内容,如果参数是数字,则相当于是返回程序的运行状态码,和 Linux 中的状态码是一样的概念。
浏览器信息
当我们使用浏览器访问的时候,可以通过 get_browser() 函数来获得浏览器的一些信息。
var_dump(get_browser(null, true));
// array(15) {
// ["browser_name_regex"]=>
// string(108) "~^mozilla/5\.0 \(.*mac os x 10.15.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*version/14\.0.* safari/.*$~"
// ["browser_name_pattern"]=>
// string(88) "Mozilla/5.0 (*Mac OS X 10?15*) applewebkit* (*khtml*like*gecko*) *Version/14.0* Safari/*"
// ["parent"]=>
// string(11) "Safari 14.0"
// ["platform"]=>
// string(5) "macOS"
// ["comment"]=>
// string(11) "Safari 14.0"
// ["browser"]=>
// string(6) "Safari"
// ["browser_maker"]=>
// string(9) "Apple Inc"
// ["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(true);
while(1){
echo " ";
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-d H:i:s") . " Connection aborted! " . $v . PHP_EOL, FILE_APPEND);
exit;
}
}
// 1.txt
// 2021-01-04 08:56:22 Connection aborted! 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
相关推荐
- 史上最全的浏览器兼容性问题和解决方案
-
微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...
-
- 平面设计基础知识_平面设计基础知识实验收获与总结
-
CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...
-
2025-02-21 16:01 yuyutoo
- 写作排版简单三步就行-工具篇_作文排版模板
-
和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...
- 写一个2048的游戏_2048小游戏功能实现
-
1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...
- 今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……
-
最近的天气暖和得让很多小伙伴们喊“热”!!! 昨天的气温到底升得有多高呢?你家有没有榜上有名?...
- CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
-
之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...
- 你的自我界限够强大吗?_你的自我界限够强大吗英文
-
我的结果:A、该设立新的界限...
- 行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?
-
行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...
-
- 让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
-
去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...
-
2025-02-21 16:00 yuyutoo
- 今年国家综合性消防救援队伍计划招录消防员15000名
-
记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...
- 一起盘点最新 Chrome v133 的5大主流特性 ?
-
1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...
- 竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使
-
style="text-align:center;"data-mce-style="text-align:...
- 学物理能做什么?_学物理能做什么 卢昌海
-
作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...
-
- 你不知道的关于这只眯眼兔的6个小秘密
-
在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...
-
2025-02-21 16:00 yuyutoo
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)