如果它们相同,为什么我会"definition differs"?



在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
}
?>

相关内容

  • 没有找到相关文章

最新更新