php:特性优先规则可以用于属性吗?
特性优先规则可以用于属性吗?我最初的研究没有发现任何东西,测试也没有得出任何结果php:特性优先规则可以用于属性吗?,php,traits,Php,Traits,特性优先规则可以用于属性吗?我最初的研究没有发现任何东西,测试也没有得出任何结果 trait ReuseThis{ public $Dependency_Property; public function mutateProperty(){ //...long method } } trait privatePropInstead{ private $Dependency_Property; } class precedence_test{
trait ReuseThis{
public $Dependency_Property;
public function mutateProperty(){
//...long method
}
}
trait privatePropInstead{
private $Dependency_Property;
}
class precedence_test{
//would like to reuse long methods of ReuseThis, but with private properties
use ReuseThis,privatePropertyInstead{
//all of these fail
//privatePropInstead->Dependency_Property insteadof ReuseThis;
//privatePropInstead::$Dependency_Property insteadof ReuseThis;
//privatePropInstead::Dependency_Property insteadof ReuseThis;
}
}
就财产而言,无论在何处申报,重要的是财产的价值
值问题
可以而且应该通过为属性赋值来解决,并且应该在公共函数\uuu construct()
中完成。这是该功能的全部目的
PS
值赋值在
static
属性中无法正常工作,但我强烈建议大家不要使用static
属性。只需使用另一个类作为singleton。。。好吧,这是针对另一个问题的谈话。您能否提供一个例子,说明如何通过在构造函数中为冲突属性赋值来解决“值问题”?我做了一个实验:创造了两个特征和类别。在traits中,我定义了相同的非静态属性,但定义不同。然后在类和构造函数中使用traits,将traits中的冲突属性赋值。我在尝试创建这个类的实例时遇到了PHP致命错误。也许做smth是错误的,但现在,我认为不可能使用具有相同属性的特性…我用于测试任务。如果你能让你的代码在那里工作,并以某种方式传递给我,我很乐意仔细看看。重新阅读你的帖子并在phpfiddle.org中编写代码,我意识到我可能理解错了你帖子的意思,这就是我第一次认为你帖子的意思:“不同特征的相同属性之间的冲突可以通过重新分配构造函数中的属性值来解决”。现在我想你的意思是:“属性的值不应该在traits中设置,而应该在class构造函数中设置”,你能确认吗?是的,第二个是我想说的。如果不清楚,请纠正我的措辞。英语是我的第二语言。我的也是,也许这就是为什么我一开始就弄错了:)但是伊姆霍:我认为如果在帖子中,有一个关于如何处理来自不同特质的冲突属性的信息会更好。或者确认现在不可能,具有相同属性和相同值的特征不应该一起使用——这可能是因为您在帖子“属性不应该在特征中初始化,而应该在构造函数中初始化”中给出的原因。