文件
yjyf/server/extend/fast/Version.php
linda 376ce7b5c9 feat(api): 全链路后端 + 数据库设计 + E2E 测试(65 项断言全通过)
数据库:
- db/schema_phase1.sql  16 张业务表(类目/服务/地址/师傅/订单/流水/取证/报价/评价/券/钱包/提现/结算/消息)
- db/seed_phase1.sql    15 类目 + 32 服务项目 + 新人券(幂等)

后端 API (application/api/controller):
- Base/Auth/Home/Address/Order/Master/Review
- app/common/library/OrderStatus  11 状态机 + 流转矩阵
- application/api/common.php  PHP 8.5 兼容垫片(E_DEPRECATED 不再升级为异常)

测试:
- tests/e2e_flow.js  用户下单→支付→师傅抢单→履约→验收→结算→评价 全链路 65 项断言
- 含异常用例:越权/重复操作/非法状态流转/2h 未联系自动回流
2026-10-28 15:45:51 +08:00

80 行
2.0 KiB
PHP
可执行文件

<?php
namespace fast;
/**
* 版本检测和对比
*/
class Version
{
/**
* 检测版本是否的版本要求的数据中
*
* @param string $version
* @param array $data
* @return bool
*/
public static function check($version, $data = [])
{
//版本号以.分隔
$data = is_array($data) ? $data : [$data];
if ($data) {
if (in_array("*", $data) || in_array($version, $data)) {
return true;
}
$ver = explode('.', $version);
if ($ver) {
$versize = count($ver);
//验证允许的版本
foreach ($data as $m) {
$c = explode('.', $m);
if (!$c || $versize != count($c)) {
continue;
}
$i = 0;
foreach ($c as $a => $k) {
if (!self::compare($ver[$a], $k)) {
continue 2;
} else {
$i++;
}
}
if ($i == $versize) {
return true;
}
}
}
}
return false;
}
/**
* 比较两个版本号
*
* @param string $v1
* @param string $v2
* @return boolean
*/
public static function compare($v1, $v2)
{
if ($v2 == "*" || $v1 == $v2) {
return true;
} else {
$values = [];
$k = explode(',', $v2);
foreach ($k as $v) {
if (strpos($v, '-') !== false) {
list($start, $stop) = explode('-', $v);
for ($i = $start; $i <= $stop; $i++) {
$values[] = $i;
}
} else {
$values[] = $v;
}
}
return in_array($v1, $values) ? true : false;
}
}
}