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
不可知的原因,在本地始终无法完成安装,最后在Linux服务器上完成了安装!
进程交互
use Illuminate\Support\Facades\Process;
$result = Process::run('ls -la');
return $result->output();
本作品采用《CC 协议》,转载必须注明作者和本文链接
绷不住了
有性能提升吗?
然并卵,我们的项目还在继续撸
8.x
:unamused:本质上来说,Laravel10 并没有新技术,只是功能和体验上的更改。
前几天把一个 laravel9 的项目升级到 10 ,感觉还是挺简单的。