PHPStorm 取消当新建文件时自动添加到 git(执行 git add {filename}) 作者: Chuwen 时间: 2021-09-07 分类: 软件 评论 ### PHPStorm 取消当新建文件时自动添加到 git(执行 git add {filename}) 按照如下操作即可 ![iShot2021-09-07 15.26.49.jpg](https://cdn.nowtime.cc/2021/09/07/2429317775.jpg)
编写 PHP 代码更优雅些 - 持续更新 作者: Chuwen 时间: 2021-09-05 分类: PHP技巧,PHP 评论 ### 基础 PHP 8.0 + #### 命名参数 ```php // PHP 7 htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); // PHP 8 htmlspecialchars($string, double_encode: false); ``` ### 注解 > 现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。 ```php // PHP 7 class PostsController { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get($id) { /* ... */ } } // PHP 8 class PostsController { #[Route("/api/posts/{id}", methods: ["GET"])] public function get($id) { /* ... */ } } ``` #### 构造器属性提升 ```php // PHP 7 class Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0 ) { $this->x = $x; $this->y = $y; $this->z = $z; } } // PHP 8 class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} } ``` #### 联合类型 > 相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。 ```php // PHP 7 class Number { /** @var int|float */ private $number; /** * @param float|int $number */ public function __construct($number) { $this->number = $number; } } new Number('NaN'); // Ok // PHP 8 class Number { public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError ``` #### Match 表达式 ```php // PHP 7 switch (8.0) { case '8.0': $result = "Oh no!"; break; case 8.0: $result = "This is what I expected"; break; } echo $result; //> Oh no! // PHP 8 echo match (8.0) { '8.0' => "Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected ``` #### Nullsafe 运算符 ```php // PHP 7 $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } } // PHP 8 $country = $session?->user?->getAddress()?->country; ``` ---- ### 枚举 1. 使用 PHP 8.1,截止到 2021年9月4日,8.1 版本未正式发布 2. 使用扩展包实现:https://github.com/myclabs/php-enum ```shell composer require myclabs/php-enum ``` ### JSON 转 Class 使得 IDEA 语法提示 > Github: https://github.com/cweiske/jsonmapper ```shell composer require netresearch/jsonmapper ``` ### 泛型 https://github.com/mrsuh/php-generics
做个 Larvel Model 插入或更新小笔记,因为犯错比较多的 作者: Chuwen 时间: 2021-09-03 分类: Laravel,PHP 1 条评论 ### Laravel 模型 新建数据 或者 更新数据 > 可能我这个方法不够优雅,欢迎批评指正 ```php first(); // 如果为空 if (is_null($content)) { // 创建模型实例 $content = new Content; $content->uid = $uid; } $content->text = '测试测试'; // 新建数据 或者 更新数据 $content->save(); } } ``` 再留个中文文档的相关链接:https://learnku.com/docs/laravel/8.x/eloquent/9406#c7d398
Laravel 验证器(Validation)验证数组及元素 作者: Chuwen 时间: 2021-08-30 分类: Laravel,PHP 评论 ### 示例 ```php $rules = [ 'country_code_list[]' => ['required_without:courier_code', 'array'],//这个字段必须为数组 'country_code_list[].*' => ['string', 'distinct', 'size:2'],//数组里的元素必须是字符串,并且要是唯一的,并且长度要为 2 ]; $validated = Validator::make($request->all(), $rules); // 打印验证错误信息 dd($validated->errors()); ``` ### 模拟请求数据 > POST 请求 BODY ```json { "country_code_list[]": [ "CN", "JP" ] } ```
Laravel 迁移文件 新增、修改、删除 字段命名规则 作者: Chuwen 时间: 2021-08-27 分类: PHP 2 条评论 ## 个人规范仅供参考 ### 新增迁移文件 > 推荐使用创建模型命令生成迁移文件 `php artisan make:model 模型名 -m` ```shell php artisan make:model User -m # 这样就会生成 create_users_table # 会自动生成有复数的表名字 ``` ### 添加字段 > 规则:`add_字段名_to_表名` ```shell php artisan make:migration add_votes_to_users_table --table=users ``` ### 修改字段 > 规则:`change_字段名_to_表名` ```shell php artisan make:migration change_votes_to_users_table --table=users ``` ### 删除字段 > 规则:`remove_字段名_to_表名` ```shell php artisan make:migration remove_votes_to_users_table --table=users ```