call_user_func和call_user_func_array详解

这是2020小目标20篇技术Blog的第 1 篇
距离小目标还有 19 篇✍️
@LiKachung

call_user_func

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
第一个参数 callback 是被调用的回调函数 其余参数是回调函数的参数

call_user_func_array

call_user_func_array ( callable $callback , array $param_arr ) : mixed
第一个参数 callback 是被调用的回调函数 param_arr是回调函数的参数数组

Laravel Passport结合Dingo实现API登录登出

准备工作

  • 引入Passport
  • 引入Guzzle
  • 引入Dingo
composer require laravel/passport
composer require guzzlehttp/guzzle
composer require dingo/api

cURL error 60和SSL CA bundle not found解决方案

问题复现

最近将laravel项目部署服务器时
由于站点已配置了tls
使用GuzzleHttp\Client请求oauth的时候
出现了这个问题

cURL error 60: SSL certificate problem: certificate is not yet valid

伴随而来的可能还有这个问题
SSL CA bundle not found: xxxx

匹配话题词实现

需求分析

现在社交平台存在大量话题,例如微博
假设话题词的结构如下

#word1#,#word2#,#word3#

实现对话题词的过滤
结构不符合 返回错误

相同字段嵌套的多维数组遍历递归实现

JSON示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// json中的嵌套层数大概在1-8层之间
$graph = {
'name': 'a',
'value': '123'
'children': {
'0': {
'name': 'a',
'value': '123',
'children': {
'0': {
'name': 'a',
'value': '123',
},
...
}
},
...
}
},
...

需求分析

信息引爆点分析 截取JSON中以value排序的top20
[其中子数组的截取无需排序]
通过name批量请求接口转换对应的内容 填充原数据源[JSON]

面向对象SOLID准则

SOLID

单一功能

开闭原则

里氏替换

接口隔离

依赖反转

UTF-8下实现正则匹配

需求

满足以汉字大小写字母数字下划线逗号组成
长度小于1k的合法String

即word1,word2,word3,word4
word中只包含汉字大小写字母数字下划线
且由用英文逗号分隔
且最后不需要添加英文逗号

求多维数组的并集

最近 有个小需求 一眼看上去挺简单
细想还是有点门道 可能是我太渣渣了😂

问题

将如下的$arr进行处理 替换$arr_template对应的键值对「原来的value为空」
两个数组之间无序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// 需求并集处理的数组
$arr = [
[
'name'=>'xasxa',
'value'=>'3131'
],
[
'name'=>'xxcc',
'value'=>'1234'
]
];
// 并集处理的模版
$arr_template = [
[
'name'=>'xxcc',
'value'=>'0'
],
[
'name'=>'qedcc',
'value'=>'0'
],
[
'name'=>'csaq',
'value'=>'0'
],
[
'name'=>'xasxa',
'value'=>'0'
],
[
'name'=>'hjsa',
'value'=>'0'
]
];

CodeIgniter小记

框架都差不多 掌握MVC思想即可
作为Laravel的忠实拥护者 以及写过PHPCMS的技术渣渣
因为业务的需要 使用CI开发 半天时间过了下技术文档
最大感受是 和Laravel相比较 更容易入门易懂
缺点呢 就是代码没有那么优雅

原文只记录了几点文档里的东西 怕自己忘记😁

析构函数和register_shutdown_function执行先后问题

析构函数/__destruct()

__destruct ( void ) : void

简介

当对象结束其生命周期时
e.g: 对象所在的函数已调用完毕
系统自动执行析构函数

register_shutdown_function

register_shutdown_function ( callable $callback [, mixed $... ] ) : void

简介

在脚本执行完成或调用 exit() 之后注册要执行的回调

可以多次调用 register_shutdown_function()
并且每次调用的顺序都与注册时的顺序相同 如果在一个已注册的关闭函数中调用 exit() 则处理完全关闭
并且不会调用其他注册的关闭函数

PHP生命周期

PHP生命周期主要分为五大阶段

  • 模块初始化
  • 请求初始化
  • 执行
  • 请求关闭
  • 模块关闭

具体流程详情如下

PHP对象的深、浅拷贝

深浅拷贝定义

深拷贝

赋值时值完全复制 完全的copy 对其中一个作出改变 不会影响另一个
即 值传递

浅拷贝

赋值时 引用赋值 相当于取了一个别名 对其中一个修改 会影响另一个
即 引用传递

暴露PHP版本号带来的风险?

最近 被问到一个问题
暴露PHP版本号带来的风险
我是一脸懵的 因为之前没特别留意过这些安全方面的问题

于是乎
我搜索google了许久 发现大部分都是在讲解如何修复
最后 发现原因

PHP | Golang 生成区间随机数的方法

如题
假设 i, j 为整型且满足关系 i < j

PHP

1
2
3
// 内置函数
<?php
echo mt_rand(i, j);

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
func randNum(i, j int) int {
// 一定要给一个时间戳的种子 否则每次生成都是一样的值
r := rand.New(rand.NewSource(time.Now().UnixNano()))
return r.Intn(j - i) + i
/**
* 也可以使用
* rand.Seed(time.Now().Unix())
* return rand.Intn(j - i) + i
* 需要注意的是
* Seed使用提供的種子值將生成器初始化為確定性狀態
* 種子不應與任何其他rand方法同時調用
*/
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×