Laravel 10阅读理解

前言#

不知不觉一年又过去了,遥想去年用 Laravel 9 写的一个项目目前还没有火起来,laravel 10 又出来了,新的技术总是让人猝不及防,来不及感慨技术的日新月异,让我们来看看 Laravel10 带给了我们哪些改变,我会把重要的改变摘录到本文中,供大家阅读

阅读摘录#

PHP 版本支持#

  • Laravel 10.x 放弃了对 PHP 8.0 的支持,要求至少使用 PHP 版本 8.1
  • php 的最新版本为 php82,如果你在 Laravel 10 中使用 PHP 8.2,这就更棒了!

弃用动态属性#

  • PHP8.2 中最值得注意的弃用之一就是弃用动态属性。如果一个类属性没有声明就被调用或赋值,就会退出程序。这个可能会影响到很多的的 PHP 遗留程序,推荐的修复方法是在类型中声明属性。在 laravel 9 中就已经支持了 PHP82 的规则,所以你不光可以在 laravel 10 中放心大胆的使用 php82,在 laravel 9 中你也可以使用!
class User 
{    
    public int $uid;
    public string $name;//不声明属性将会报错
}
$user = new User();
$user->name = 'Foo';

Predis 版本支持#

  • Predis 是一个强大的 Redis 客户端,Laravel 以前支持 1 和 2 两个版本,但从 Laravel 10 开始,该框架不再支持 Predis 1.

本地类型声明#

官方文档 :Laravel 10.x 彻底更新了框架使用的应用程序骨架和所有存根,以引入所有方法签名的参数和返回类型提示。此外,删除了多余的“doc block”类型提示信息:
这段话初读的时候让人有点摸不着头脑,其实我们通过对比两组不同版本的骨架代码就可以清晰的看到变动,我们选择一个文件来对比 \app\Http\Middleware\RedirectIfAuthenticated.phpp

  • 可以直观的看出它是删除了部分 doc block 注释,而在代码中声明方法签名 (方法名 + 参数列表) 的类型和返回值的类型
  • 不管是 doc block 类型提示还是类型声明,都是为了提供更好的类型清晰度,方便开发者的快速理解
  • laravel 9 版本
class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}
  • laravel 10 版本
class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next, string ...$guards): Response
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}

PhpStudy 安装 php82#

在安装 laravel 10 的时候遇到了一些小问题,
我直接使用 composer create-project laravel/laravel 进行了安装,完成后发现安装的是 laravel 9,laravel 10 的安装需要提供 >=8.1 的 PHP 版本,我本地之前用的一直是 PHPStudy,目前内置的最高版本是 php80,所以我们先要想办法安装 php81,我准备直接安装 php82 来进行 laravel 10 的测试,以下为安装步骤

  • 官网下载最新的 php 版本 windows.php.net/download/
  • 这里我们下载的是 64 位 nts 版的 PHP8.2.0,下载速度有点小慢,目前官网提供的最新版本是 8.2.4
  • 解压压缩包,并改文件夹名为 php8.2.0nts,移动到 phpstudy_pro\Extensions\php 目录下
  • 将 php8.2.0nts 目录下的 php.ini-development 文件复职一份并改文件名为 php.ini
  • ;extension_dir = “ext” 改为
    extension_dir=”D:\phpstudy_pro\Extensions\php\php8.2.0nts\ext”
  • 将 D:\phpstudy_pro\Extensions\php\php8.2.0nts 配置为环境变量
  • 对 php.ini 进行一些配置
extension=bz2
extension=curl
extension=fileinfo
extension=gd
extension=gettext
extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql

至此,依然遇到了巨大的问题,composer 依然安装不了 laravel 10

Laravel 10阅读理解

不可知的原因,在本地始终无法完成安装,最后在 Linux 服务器上完成了安装!

进程交互#

use Illuminate\Support\Facades\Process;

$result  =  Process::run('ls -la');

return  $result->output();
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

绷不住了

2年前 评论
playmaker 2年前

有性能提升吗?

2年前 评论
mowangjuanzi 2年前
随波逐流

然并卵,我们的项目还在继续撸 8.x :unamused:

2年前 评论
fatrbaby

本质上来说,Laravel10 并没有新技术,只是功能和体验上的更改。

2年前 评论

前几天把一个 laravel9 的项目升级到 10 ,感觉还是挺简单的。

2年前 评论