PHP高级

Mr.Hope2022年9月17日
大约 2 分钟

PHP高级

PHP内置回调事件

# 程序结束(包含正常结束和异常结束)时,触发此回调
register_shutdown_function(function () {
    // 获取上一个错误,如果是正常结束返回的是 NULL
    $error = error_get_last();
});
# 注册 \Exception 抛出时的回调处理
set_exception_handler(function (\Exception $exception) {
});
# 注册 \Error 抛出时的回调处理
set_error_handler(function ($iErrNo, $sErrStr, $sErrFile, $iErrLine) {
});
# 注册类加载
spl_autoload_register(function ($sClassName) {
});

高手擅长回避的问题

非0即真

self::assertSame(7, 7 ?: 1);
self::assertSame(1, 0 ?: 1);
// 你是不是以为下面的结果是 1 啊
self::assertSame(-2, -2 ?: 1);

总结:

$var3 = (0 即真) ? $va1 : $val2;

知道了非 0 即真,那么下面的答案就简单了。

if (-1) {
    var_dump(1);
} else {
    var_dump(0);
}

输出:int(1)

strpos存在返回0

PHP8.0终于对了

OPcache 和 OPcode 的关系

最近你是不是也被这个问题困惑,那我们一起来翻阅 PHP 手册来需求解答。 在 PHP 手册的 函数参考 > 影响 PHP 行为的扩展 > OPcache 有专业的解答。

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

那么 OPcode 是什么?你还没解释。

什么,不是说了吗? OPcode 就是字节码,相当于 Java 开发中的 xxx.class,PHP 的 Zend VM 解析引擎就类似 Java 的 VM

说白了就是,用 OPcache 这个扩展来缓存 OPcode 到内存,从而来提高 PHP 的解析速度。

更多使用技巧请参考: 使用 OpCache 提升 PHP 性能open in new window

内存中的堆栈区别

很多是否还是会碰到堆栈,那堆栈是什么,区别又是什么,是时候花时间弄明白了。

大小不大,最大也就10M
手动释放内存不需要,临时空间
函数退出后系统释放
存放数据方法调用,所有局部变量和函数的参数

const与define有何区别

我们知道 const 和 define 都可以定义全局常量,那么他们有和区别呢?

<?php

const VERSION = '3.2.3';

defined('ADDON_PATH') or define('ADDON_PATH', APP_PATH . 'Addon');

总结一下,就是,如果定义的常量没有其他常量条件限制,就使用const常量定义语法,如果有条件限制,则使用宏定义define来定义常量。

var_export高级用法

高级应用,代码压缩。

Loading...