在Laravel中,我有一个类User,它扩展了Authenticatable并使用了一个名为Activable:的特性
class User extends Authenticable {
use Activable;
protected $is_active_column = 'is_active';
}
trait Activable {
/**
* The name of the column with the activable status
*
* @var string
*/
protected $is_active_column = 'is_active';
}
当我试图在修补程序中找到一个用户时,我得到了这个错误:
[!] Aliasing 'User' to 'AppModelsUser' for this Tinker session.
PHP Fatal error: AppModelsUser and AppTraitsActivable define the same property ($is_active_column) in the composition of AppModelsUser. However, the definition differs and is considered incompatible.
这是预期行为。Traits上的PHP文档明确介绍了这个
属性
特征也可以定义属性。
示例#12定义属性
<?php trait PropertiesTrait { public $x = 1; } class PropertiesExample { use PropertiesTrait; } $example = new PropertiesExample; $example->x; ?>
如果一个特性定义了一个属性,则类不能定义具有相同名称的属性,除非它是兼容的(可见性和初始值相同(,否则将发出致命错误
示例#13冲突解决
<?php trait PropertiesTrait { public $same = true; public $different = false; } class PropertiesExample { use PropertiesTrait; public $same = true; public $different = true; // Fatal error } ?>