PHP 冷门但使用的函数

记录一些平时不怎么用到的,有点 cold 的函数或代码片段

array_walk

array_walk 也是对数组的一个遍历,可以拿到 key 和 value,并且返回值是 bool 类型

blog

example

1
2
3
4
5
6
7
8
$a = ["a" => 1, "b" => 2];
$res = array_walk($a, function(&$v, $k) {
echo $k;
$v = $v + 1;
});

print_r($res); // true
print_r($a); // ["a" => 2, "b" => 3]

clone

https://stackoverflow.com/questions/10831798/php-deep-clone-object

php object 深度拷贝

error_log

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

把错误信息发送到 web 服务器的错误日志,或者到一个文件里。

1
2
3
4
5
// 记录日志到文件
\error_log('message', 3, '/home/rovast/debug.log');

// 记录日志到文件
\error_log('message', 3, '/home/rovast/debug' . \posix_getpid() . '.log');

当在开发过程中需要记录日志到文件时,这种方式格外好用。

JsonSerializable

自定义 json_encode 的实现。

blog

list

使用 list 可实现类似 go 的多值返回

1
2
3
4
5
6
7
8
function multi_return() {
return [200, 'success'];
}

list($code, $msg) = multi_return();

echo $code; // 200
echo $msg; // success

在 php7.1 之后有了一种便捷的写法 [$code, $msg] = multi_return(), 这里的方括号是 list 的简写

register_shutdown_function

register_shutdown_function — 注册一个会在php中止时执行的函数

example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function shutdown() {
echo 'php 脚本运行结束';
}

register_shutdown_function('shutdown');

class Controller {
public function responseJson() {
echo json_encode(['code' => 200, 'msg' => 'success']);
exit;
}
}

$controller = new Controller();
$controller->responseJson();

// {"code":200,"msg":"success"}php 脚本运行结束

我们手动触发的 exit 最后会去执行 register_shutdown_function 注册的函数。比如在框架中直接 exit 了之后,进行一些回收动作。

set_exception_handler

set_exception_handler — 设置用户自定义的异常处理函数。

设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常。 在 exception_handler 调用后异常会中止。

example

// 执行完此函数后,运行终止
function exception_handler($exception) {
  echo "自定义异常处理: " , $exception->getMessage(), "\n";
}

set_exception_handler('exception_handler');

throw new Exception('我来抛出一个异常');

echo "异常之后的代码\n"; // 此行代码不会执行

输出 自定义异常处理: 我来抛出一个异常在 exception_handler 后调用异常会终止