trait成员属性覆盖情况

今天把phpstorm升级到了最新版,因为支持PHP8的新特性。在编写模型的时候发现,突然来了致命报错的红波浪线

这咋回事?之前也没有这个报错呀。然后发现这个属性是trait HasTimestamps中的一个属性,Model引入了。

查了下资料:

一旦多个trait或者class有相同属性但值不相同PHP均会报出致命错误

然后我测试了一下

trait TraitTest
{
    public $timestamps = true;
}

abstract class ParentTest
{
    use TraitTest;
}

class SubclassTest extends ParentTest
{
    public $timestamps = false;
}

$test = new SubclassTest();
var_dump($test->timestamps);

发现,如果在ParentTest类中重新定义timestamps属性且值不同,报致命错误。但是在SubclassTest重新定义timestamps是正常运行的,也就是laravel文档说明方式。

既然代码运行没啥问题,但是这个红色波浪报错看的有点烦,所以我改成了下面的写法

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);
    $this->timestamps = false;
}

也能实现相同的效果。毕竟model多了一排的bug错误挺头疼。也许是idea更新后的问题

注:最新的 PHPstorm 2020.3.1版本已修复此问题

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

我也是全是这个报错,然后我又把版本退回去了

4年前 评论

@win 最新版本已修复。不会有报错了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!