我希望能够创建"最终特征",并具有以下行为。我意识到这不可能通过traits实现(或者可以吗?那会让我非常高兴),但我只是想传达我的意图。
因此,我希望拥有一个特征,它应该:
我希望能够以某种方式检查类是否使用了一个 traits(例如, $myObject instanceof Content)的方法。
确保在使用trait时,不能更改方法的名称/可见性。因此,不应允许出现这种情况。
因此,我希望拥有一个特征,它应该:
trait Content {
public final function getPostContent(){ /*...*/ }
public final function setPostContent($content){ /*...*/ }
}
我需要的是:
将特征中的函数标记为final,确保如果一个类使用了这个特征,那么特征实现就是被保证的实现。
class MyClass {
use Content;
public function getPostContent() { // This should not be allowed
return null;
}
}
我希望能够以某种方式检查类是否使用了一个 traits(例如, $myObject instanceof Content)的方法。
class MyClass {}
class MyClassWithContent {
use Content;
}
var_dump((new MyClass) instanceof Content); // "bool(false)"
var_dump((new MyClassWithContent) instanceof Content; // "bool(true)"
确保在使用trait时,不能更改方法的名称/可见性。因此,不应允许出现这种情况。
class MyDeceptiveClass {
use Content {
Content::getPostContent as nowItsNotCalledGetPostContentAnymore();
Content::setPostContent as protected; // And now setPostContent is protected
}
}