tp6 不兼容php8.0版本问题总结

本文档记录了将TP6的PHP版本升级到8.0后遇到的MethodReflectionParameter::getClass()弃用问题及解决方案,以及因组件版本过低导致的b_implicit_flush()错误。修复方法包括更新Container.php中bindParams方法,以适应PHP8.0的反射类变化,并升级topthink/think-view组件以消除错误提示。

今天tp6 php版本升级到8.0版本后 报了几个错误总结一下

Method ReflectionParameter::getClass() is deprecated

由于php8.0弃用了getClass 所以进行了报错 修改方法

找到 vendor\topthink\framework\src\think\Container.php 的 bindParams方法改为一下方法

/**
     * 绑定参数
     * @access protected
     * @param ReflectionFunctionAbstract $reflect 反射类
     * @param array                      $vars    参数
     * @return array
     */
    protected function bindParams(ReflectionFunctionAbstract $reflect, array $vars = []): array
    {
        if ($reflect->getNumberOfParameters() == 0) {
            return [];
        }

        // 判断数组类型 数字数组时按顺序绑定参数
        reset($vars);
        $type   = key($vars) === 0 ? 1 : 0;
        $params = $reflect->getParameters();
        $args   = [];

        foreach ($params as $param) {
            $name      = $param->getName();
            $lowerName = Str::snake($name);
            //$class     = $param->getClass();
            $reflectionType = $param->getType();

            if ($reflectionType && $reflectionType->isBuiltin() === false) {
                $args[] = $this->getObjectParam($reflectionType->getName(), $vars);
            } elseif (1 == $type && !empty($vars)) {
                $args[] = array_shift($vars);
            } elseif (0 == $type && array_key_exists($name, $vars)) {
                $args[] = $vars[$name];
            } elseif (0 == $type && array_key_exists($lowerName, $vars)) {
                $args[] = $vars[$lowerName];
            } elseif ($param->isDefaultValueAvailable()) {
                $args[] = $param->getDefaultValue();
            } else {
                throw new InvalidArgumentException('method param miss:' . $name);
            }
        }

        return $args;
    }

就可以了 可参考 https://github.com/top-think/framework/commit/df4a07d2f51307a6fabdf75dc5b4b7f8b0ad8af8

2.

之后 又报了 b_implicit_flush(): Argument #1 ($enable) 的错误 这是因为组件topthink/think-view 版本太低 需要升级一下 使用命令

composer require topthink/think-view

就可以了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值