分类 PHP 下的文章

array_change_key_case 更改数组中所有键为大写或小写
array_chunk 将一个数组分割成多个
array_column 返回数组中指定列的值
array_combine 使用一个数组作为键,另一个数组作为值创建新数组
array_count_values 统计数组中各个值的个数
array_diff_assoc 带索引检查计算数组的差集
array_diff_key 使用键名比较数组的差集
array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey 用回调函数对键名比较计算数组差集
array_diff 计算数组差集
array_fill_keys 使用指定的键和值填充数组
array_fill 用给定的值填充数组
array_filter 使用回调函数过滤数组元素
array_flip 交换数组中的键和值
array_intersect_assoc 带索引计算数组的交集
array_intersect_key 使用键名比较计算数组的交集
array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey 在键名上使用回调函数来比较计算数组的交集
array_intersect 计算数组的交集
array_is_list 检查给定的数组是否为列表 (PHP 8 >= 8.1.0)
array_key_exists 检查数组里是否有指定的键名或索引
array_key_first 获取数组的第一个键值
array_key_last 获取一个数组的最后一个键值
array_keys 返回数组中部分或所有的键名
array_map 为数组每个元素应用回调函数
array_merge_recursive 递归的合并一个或多个数组
array_merge 合并一个或多个数组
array_multisort 对多个数组或多维数组进行排序
array_pad 以指定长度将一个值填充进数组
array_pop 弹出数组最后一个单元(出栈)
array_product 计算数组中所有值的乘积
array_push 将一个或多个单元压入数组末尾(入栈)
array_rand 从数组中随机取出一个或多个随机键
array_reduce 用回调函数迭代地将数组简化为单一的值
array_replace_recursive 使用传递的数组递归替换第一个数组的元素
array_replace 使用传递的数组替换第一个数组元素
array_reverse 返回单元顺序相反的数组
array_search 在数组中搜索给定的值,如果成功返回首个相应的键名
array_shift 将数组开头的单元移出数组
array_slice 从数组中取出一段
array_splice 去掉数组中的某一部分并用其它值取代
array_sum 对数组中的所有值求和
array_udiff_assoc 带索引检查计算数组的差集,用回调函数比较数据
array_udiff_uassoc 带索引检查计算数组的差集,用回调函数比较数据和索引
array_udiff 用回调函数比较数据来计算数组的差集
array_uintersect_assoc 带索引检查计算数组的交集,用回调函数比较数据
array_uintersect_uassoc 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
array_uintersect 计算数组的交集,用回调函数比较数据
array_unique 移除数组中重复的值
array_unshift 在数组开头插入一个或多个单元
array_values 返回数组中所有的值
array_walk_recursive 对数组中的每个成员递归地应用用户函数
array_walk 使用用户自定义函数对数组中的每个元素做回调处理
array 新建一个数组
arsort 对数组进行降向排序并保持索引关系
asort 对数组进行升序排序并保持索引关系
compact 建立一个数组,包括变量名和它们的值
count 计算数组中的单元数目,或对象中的属性个数
current 返回数组中当前的值
each 返回数组中当前的键/值对并将数组指针向前移动一步(自PHP7.2起废弃)
end 将数组的内部指针指向最后一个单元
extract 从数组中将变量导入到当前的符号表
in_array 检查数组中是否存在某个值
key_existsarray_key_exists
key 返回数组中当前单元的键名
krsort 对数组按照键名逆向排序
ksort 对数组根据键名升序排序
list 把数组中的值赋给一组变量
natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort 用“自然排序”算法对数组排序
next 将数组中的内部指针向前移动一位
poscurrent
prev 将数组的内部指针倒回一位
range 根据范围创建数组,包含指定的元素
reset 将数组的内部指针指向第一个单元
rsort 对数组进行降序排序
shuffle 打乱数组
sizeofcount()
sort 对数组升序排序
uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort 使用用户自定义的比较函数对数组中的键名进行排序
usort 使用用户自定义的比较函数对数组中的值进行排序

转自: https://learnku.com/articles/63034

$post = [
    'page' => 10,
    'b' => 200
];

$page = $post['page'] ?? 1;
// 等价于
$page = isset($post['page']) ? $post['page'] :1;

$page = $post['page'] ?: 1;
// 等价于
$page = $post['page'] ? $post['page'] :1;

// 这个是上传文件的方法 失败返回false
$res = $this->uploadfile();
$img_path = $res ?: '';

实际不上也就这两个常用:

$a??1;
$a?:1;

转自:https://learnku.com/articles/60741

1、xls
application/vnd.ms-excel
2、xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
3、ppt
application/vnd.ms-powerpoint
4、pptx
application/vnd.openxmlformats-officedocument.presentationml.presentation
5、doc
application/msword
6、docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
7、zip
application/x-zip-compressed
8、rar
application/x-zip-compressed
9、wmv
video/x-ms-wmv
10、mp3
audio/mpeg
11、mp4
video/mp4
12、gif
image/gif
13、jpg
image/jpeg
14、png
image/png
15、bmp
image/bmp
16、psd
application/octet-stream
17、ico
image/x-icon
18、7z
application/octet-stream
19、exe
application/octet-stream
20、avi
video/avi
21、rmvb
application/vnd.rn-realmedia-vbr
22、3gp
application/octet-stream
23、flv
application/octet-stream
24、wav
audio/wav
25、krc
application/octet-stream
26、lrc
application/octet-stream
27、txt
text/plain
28、pdf
application/pdf
29、chm
application/octet-stream
30、mdb
application/msaccess
31、sql
application/octet-stream
32、con
application/octet-stream
33、log
text/plain
34、dat
application/octet-stream
35、ini
application/octet-stream
36、php
application/octet-stream
37、html 和 htmhtm
text/html
38、ttf
application/octet-stream
39、fon
application/octet-stream
40、js
application/x-javascript
41、xml
text/xml
42、dll
application/octet-stream

转自:https://learnku.com/articles/60802

products商品表

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
title SKU 名称 varchar
description SKU 描述 varchar
price SKU 价格 decimal
stock 库存 unsigne int
product_id 所属商品 id unsigne big int 外键

orders订单表

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
no 订单流水号 varchar 唯一
user_id 下单的用户ID unsigned big int 外键
address JSON格式的收货地址 text
total_amount 订单总金额 decimal
remark 订单备注 text
paid_at 支付时间 datetime, null
payment_method 支付方式 varchar, null
payment_no 支付平台订单号 varchar, null
refund_status 退款状态 varchar
refund_no 退款单号 varchar, null 唯一
closed 订单是否已关闭 tinyint, default 0
reviewed 订单是否已评价 tinyint, default 0
ship_status 物流状态 varchar
ship_data 物流数据 text, null
extra 其他额外的数据 text, null

order_sku 订单项目名

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
order_id 所属订单ID unsigned big int 外键
product_id 对应商品ID unsigned big int 外键
product_sku_id 对应商品SKU ID unsigned big int 外键
amount 数量 unsigned int
price 单价 decimal
rating 用户打分 unsigned int, null
review 用户评价 text
reviewed_at 评价时间 timestamp, null

// 加载opcache(需确认已安装opcache拓展)
zend_extension=opcache.so
// 开启opcache
opcache.enable = 1
// OPcache共享内存存储大小,单位MB
opcache.memory_consumption=1024 // 1G
// PHP使用了一种叫做字符串驻留,默认是4MB
opcache.interned_strings_buffer=32
// 这个选项用于控制内存中最多可以缓存多少个PHP文件,这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和
opcache.max_accelerated_files=80000
// 设置缓存的过期时间(单位是秒),为0的话每次都要检查
opcache.revalidate_freq=3
// 从字面上理解就是“允许更快速关闭”
opcache.fast_shutdown=1
// CLI环境下,PHP启用OPcache
opcache.enable_cli=1

答案:这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

附:面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

https://www.iteye.com/blog/hejiajunsh-1776569

1.首先在http://open-doc.dingtalk.com/microapp/serverapi2/vzzrkv中下载PHP版本SDK。解压后文件目录如图:

111.jpeg

这里我只用到dingtalk中的文件,删除aliyun、QimenCloud目录,保留top目录Autoloader.phpTopSdk.php文件。

2、composer.json中:

"autoload": {
    "classmap": [
        "database"
    ],
    "files":[
        "app/Packages/taobao/TopSdk.php"
    ],
    "psr-4": {
        "App\\": "app/"
    }
 
}

别忘记:然后执行composer dump-autoload

3、执行完毕后,在Controller中就可以直接使用DingTalk SDK了。测试结果如下(注意要加‘ \ ’):

object(DingTalkClient)#276 (9) { ["gatewayUrl"]=> string(34) "http://eco.taobao.com/router/rest" ["format"]=> string(4) "json" ["connectTimeout"]=> NULL ["readTimeout"]=> NULL ["apiCallType"]=> string(4) "oapi" ["httpMethod"]=> string(4) "POST" ["checkRequest"]=> bool(true) ["apiVersion":protected]=> string(3) "2.0" ["sdkVersion":protected]=> string(25) "dingtalk-sdk-php-20161214" }

本文转载:https://blog.csdn.net/xiaoweite1/article/details/106175892

1、可以将 Composer 降级到 1.x 版,操作如下:

composer self-update --1

2、如果您需要切换回 Composer 2.x 版,只需键入:

composer self-update --2

3、更多信息
https://5balloons.info/fix-you-are-using-composer-2-some-plugins-seem-to-be-incompatible-with/