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版本已修复此问题

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

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

3年前 评论

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

3年前 评论

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