首先,我的程序支持PHP7.0,现在改动以支持PHP8.0,记录一下方便大家参考。 由于
行数仅供参考,一般不会浮动10行。
修改前请先备份,预留充分的时间,因为本教程仅提供几个小点作为参考,修改后还需测试功能再继续修改。
由于版本跨度大,逻辑不同,需求不同,所需要的更改也就不同。
首先是App.php文件,路径在thinkphp\library\think\App.php
修改1:
在400行的函数下,新增 一行 result的报错。
`private static function getParamValue(param, &vars, $type) {
$result = '';
//新增`
修改2:
第406行:
// $class = $param->getClass();//注释掉
新增为:
`type instanceof ReflectionNamedType && !type->isBuiltin()) { class = $type->getName(); }
`
修改3:
第440行左右:
throw new \InvalidArgumentException('method param miss:' . $name);
也注释掉,改为:
if (empty($name)) { throw new \InvalidArgumentException("Method param missing: " . ($name ?? 'unknown')); }
奈何本人记性不太好,记得此处ifelse有改动过,但又恢复了,有点模糊,如果读者改完还是不行,那就参考下面的代码,仅此局部。
` if (class) { className = bind = Request::instance()->$name;
if ($bind instanceof $className) {
$result = $bind;
} else {
if (method_exists($className, 'invoke')) {
$method = new \ReflectionMethod($className, 'invoke');
if ($method->isPublic() && $method->isStatic()) {
return $className::invoke(Request::instance());
}
}
$result = method_exists($className, 'instance') ?
$className::instance() :
new $className;
}
}elseif (1 == $type && !empty($vars)) {
$result = array_shift($vars);
} elseif (0 == $type && isset($vars[$name])) {
$result = $vars[$name];
} elseif ($param->isDefaultValueAvailable()) {
$result = $param->getDefaultValue();
} else {
// php8
// throw new \InvalidArgumentException('method param miss:' . $name);
if (empty($name)) {
throw new \InvalidArgumentException("Method param missing: " . ($name ?? 'unknown'));
}
}
`
修改4:
Query.php文件,路径在thinkphp\library\think\db\Query.php 第400行:
$seq = (ord($value{0}) % $rule['num']) + 1;
改为
$seq = (ord($value[0]) % $rule['num']) + 1;
> 以上修改可供参考,以下意义不大,跨度大,逻辑不同,需求不同,所需要的更改也就不同。
时间问题,我撤回了修改。
修改5:
如果你的控制器像我这个写的,那么需要删除Request
public function edit(Request $request, $id)修改后
public function edit($request, $id)但是如果你的代码直接有类似下面的会报错:
$file = $request->file('file');以上先不动,下面的更合适
public function edit(Request $request, $id)
有Request $request这样的,改为 Request $request = null
检查$request是否为null
if ($request === null) {
return alert('表单不完整','',2);
}
request->file('file');
(掘金编辑器什么鬼东西)