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版本已修复此问题
我也是全是这个报错,然后我又把版本退回去了
@win 最新版本已修复。不会有报错了
都开始php8了啊